por
pobrecito hablador
el Miércoles, 24 Octubre de 2012, 09:49h
(#1322748)
Aparte de los prototipos, (concepto innecesario, ya que lo mismo y más se puede obtener de forma más elegante, véase python) javascript no tiene nada que no tengan otros lenguajes modernos de tipeado dinámico.
Y le falta una cosa muy importante: algún sistema de namespaces o gestión de ámbitos. Algo similar al 'import' de java o python.
por
pobrecito hablador
el Miércoles, 24 Octubre de 2012, 10:39h
(#1322755)
Una cosa que no tengo clara es si el python tiene variables persistentes de scope de funcion. El Java lo imita levemente si las variables de la funcion son constantes. Un ejemplo seria:
function foo(a) {
var bar = a + 2;
return function() { return bar++; };
}
var f = foo(2);
En coffee script si lo prefieres seria:
foo = (a) ->
bar = a + 2
() -> bar++
f = foo 2
En este caso la funcionalidad concreta provocaria que cada vez que se llama a la funcion f esta devuelve un valor incrementado de bar, aunque hiciese mucho de que foo se habria ejecutado y finalizado satisfactoriamente. Y con cada llamada a foo, tendriamos un contador nuevo en una funcion diferente. Reconozco que entender las ventajas de esto es dificil de primera entrada, supongo que por eso ha sido eliminado de casi todos los lenguajes. (No se si el Python)
Una ventaja del Javascript sobre Python es el tema de la metaprogramación, he visto dar muchos rodeos para intentar hacer algo parecido a la flexibilidad del Javascript, y aun asi, al final acaba dando muchos problemas.
Y sobre gestion de ambitos, no le falta en absoluto. De hecho entra dentro de variables persistentes en scope de funcion. Es normal que si vienes de fuera del Javascript, no conozcas el concepto y su aplicacion. Si quieres saber mas mirate el NodeJS o bien el JQuery, ambos muy estructurados. En este caso, para encapsular codigo en modules reutilizables, en navegadores, se suele utilizar el siguiente idiom:
function (namespace) {
var bar,foo;...
namespace.bar = bar; } (window);
El NodeJS ja automaticamente moduliza sin requerir este idiom. Un modulo seria:
var bar, foo;... module.exports.bar = bar;
y su uso externo:
var misc = require("./foo-bar") misc.bar()
Asi que diria que hay que andarse con ojo antes de hablar de algo que no se conoce, especialmente algo como el Javascript: tan sencillo en apariencia que parece que con poco esfuerzo lo tengamos que saber todo, pero tan maleable que puede superar muchas barreras (e incluso introducirlas).
Re:dart
(Puntos:0)Y le falta una cosa muy importante: algún sistema de namespaces o gestión de ámbitos. Algo similar al 'import' de java o python.
Re:dart
(Puntos:0)function foo(a) {
var bar = a + 2;
return function() { return bar++; };
}
var f = foo(2);
En coffee script si lo prefieres seria:
foo = (a) ->
bar = a + 2
() -> bar++
f = foo 2
En este caso la funcionalidad concreta provocaria que cada vez que se llama a la funcion f esta devuelve un valor incrementado de bar, aunque hiciese mucho de que foo se habria ejecutado y finalizado satisfactoriamente. Y con cada llamada a foo, tendriamos un contador nuevo en una funcion diferente. Reconozco que entender las ventajas de esto es dificil de primera entrada, supongo que por eso ha sido eliminado de casi todos los lenguajes. (No se si el Python)
Una ventaja del Javascript sobre Python es el tema de la metaprogramación, he visto dar muchos rodeos para intentar hacer algo parecido a la flexibilidad del Javascript, y aun asi, al final acaba dando muchos problemas.
Y sobre gestion de ambitos, no le falta en absoluto. De hecho entra dentro de variables persistentes en scope de funcion. Es normal que si vienes de fuera del Javascript, no conozcas el concepto y su aplicacion. Si quieres saber mas mirate el NodeJS o bien el JQuery, ambos muy estructurados. En este caso, para encapsular codigo en modules reutilizables, en navegadores, se suele utilizar el siguiente idiom:
function (namespace) {
var bar,foo;
namespace.bar = bar;
} (window);
El NodeJS ja automaticamente moduliza sin requerir este idiom. Un modulo seria:
var bar, foo;
module.exports.bar = bar;
y su uso externo:
var misc = require("./foo-bar")
misc.bar()
Asi que diria que hay que andarse con ojo antes de hablar de algo que no se conoce, especialmente algo como el Javascript: tan sencillo en apariencia que parece que con poco esfuerzo lo tengamos que saber todo, pero tan maleable que puede superar muchas barreras (e incluso introducirlas).