¿JavaScript me está haciendo un mal programador?

Eres un mal programador si crees que es un requisito que el lenguaje maneje tu falta de conocimiento.

1) En el sentido falso, sí, pero siempre debe documentar el contrato O comparar con “===” si no hay documentación. ¿Devuelve nulo? especificar. ¿Devuelve falso? especificar. ¿Devuelve “”? especificar. ¿Devuelve cero? especificar. De lo contrario, vuelve indefinido. Recomiendo NUNCA devolver nulo o cualquier otra cosa que no esté definida para un valor que no se definió (duh). indefinido es JS nulo, lidiar con eso.

2) No uso esos, sry

3) ¡No estás utilizando return en un bucle for! Está devolviendo un valor en una función que se ejecuta para cada elemento. Solo tenga en cuenta cómo funciona un bloque de bucle for y cómo funciona una función iteradora genérica. El idioma no debe manejar su falta de conocimiento del idioma.

4) poner “uso estricto”; como la primera declaración de una función. Nunca más tendrás ese problema.

5) Sí lo es. Use var context = this si this en este caso representa un contexto. Use var element = this si this en este caso representa un elemento (devoluciones de llamada jquery).

R. No eres un compilador / compresor de código humano, así que no trates de serlo.

– rwaldron / idiomatic.js

En pocas palabras: no es culpa de Javascript que te estés convirtiendo en un mal programador, es tu culpa.

Si desea JavaScript adicional y contenido de ingeniería, eche un vistazo en mi página de medios: medium.com/@fagnerbrack

Solución rápida: use CoffeeScript

Si no te gusta usar coffeescript, entonces todo lo que necesitas es practicar. Llegando a los puntos que mencionaste

1. nulo significa un valor vacío. undefined significa que una variable se declara pero aún no se le asigna ningún valor. Sí, no te dolerá si los usas indistintamente.

var foo; // tiene el valor como indefinido
var bar = nulo; // diciendo explícitamente que la barra no tiene ningún valor

2. No entendí lo que intentas decir, un ejemplo podría ayudar.

3. Es parte de una biblioteca de subrayado, javascript no nativo. Todavía puede usar el anticuado continuar en javascript de la siguiente manera

para (var i = 0; i <10; i ++) {
if (blabla) {
continuar;
}
hacer cosas();
}

Más información sobre continuar.

4. Si ha perdido toda comprensión que alguna vez tuvo sobre el alcance, entonces es su problema, Javascript admite el alcance funcional, debe ser diferente de eso. Además, al definir la variable, debe asegurarse de usar var para que la variable sea privada para la función de cierre.

5. Si no quieres hacer var that = this; entonces puede invocar una función usando un contexto dado de la siguiente manera

function externalFunction () {
var innerFunction = function () {
this.do_sometuff ();
}

innerFunction.call (esto); // llamando a la función interna pasando un objeto como contexto
}

Verifique Function.prototype.call () o Function.prototype.apply ()

O puede crear una función con contexto fijo usando _.bind si está usando subrayadojs. El equivalente de jQuery es $ .proxy

En general, estoy de acuerdo en que hay muchas cosas a tener en cuenta al codificar en Javascript, pero esto es exactamente lo que Coffeescript intenta resolver. Pero si no tiene ganas de aprender un idioma completamente nuevo, siga practicando codificando todo lo que pueda teniendo en cuenta estas cosas. Después de un tiempo, será algo natural para ti.

También intente ejecutar JSLint, la herramienta de calidad de código JavaScript en su código para garantizar la calidad del código. Puede integrar un complemento de gruñido si desea automatizarlo.

También culpar a un lenguaje de programación solo porque alguna biblioteca / marco está siguiendo algunas malas prácticas no es correcto en mi opinión.

Yo diría que solo lea JavaScript: The Good Parts es un libro muy pequeño. Pero sí, hay muchos buenos cambios que están en la cola para el lenguaje que hará que estas cosas sean obsoletas en los próximos años.

¿Tienes curiosidad por los cambios? comprobar las características de lukehoban / es6

No lo creo. No es JavaScript lo que te hace un mal programador, no te estás apegando a lo básico.

Indudablemente, JavaScript tiene fallas, pero también tiene algunas partes buenas: JavaScript, y te sugiero que lo leas si aún no lo has hecho. La clave es evitar las imperfecciones de JavaScript para cualquier desarrollo digno de producción real. Dicho esto, uno también debe estar preparado para encontrar sin saberlo algo de fealdad de vez en cuando.

En realidad, la mayoría de lo que estás diciendo no es tan malo, al menos en mi opinión. Javascript tiene mucho material confuso y dominar sus matices no es fácil. Lo que usted señala son algunos de los conceptos más comunes de WTF para un nuevo desarrollador de JS.

Comentaré cada uno de tus puntos de duda.

  1. Nulo e indefinido significan dos cosas bastante distintas, solo son lo mismo si usas ==, que casi nunca deberías usar, optando en su lugar por === que las tratará de manera distinta. La diferencia entre indefinido y nulo es que nulo es un valor e indefinido es la falta de un valor. Nada termina nulo en JS por sí solo, el programador debe establecerlo explícitamente en nulo. Está diciendo intencionalmente “no hay nada aquí” mientras que indefinido es Javascript implícitamente diciendo “no hay nada aquí”
  2. No sé los detalles sobre la columna vertebral o la marioneta, pero diré que está perfectamente bien pasar un valor indefinido. Tal vez no tenga sentido hasta más tarde para verificar si algo se ha definido, siempre y cuando lo que se lo esté pasando sea consciente de que puede estar indefinido.
  3. Eso es en realidad un bucle forEach, que es distinto de un bucle for en que toma una función, donde un bucle for solo tiene instrucciones para ejecutar. De todos modos, en un bucle for, el cortocircuito y pasar a la siguiente iteración tiene su propia palabra clave llamada continuar. Usar return para terminar prematuramente el interior de un bucle forEach es exactamente lo mismo. Por lo general, trato de evitar interrumpir un ciclo, pero a veces es la mejor o la única forma, por eso tenemos descanso y continuamos. Evítelos donde pueda, pero sepa que existen si los necesita.
  4. Javascript tiene un alcance de función, lo que significa que cualquier variable declarada en una función es local para esa función. Si espera que provenga de otro lugar, no lo declare, de lo contrario use siempre var. Nunca declares algo nuevo dentro de una función que quieras usar fuera de ella. JS te permitirá hacer eso omitiendo var, pero te confundirás terriblemente de dónde provienen los valores de tu programa. Sin embargo, no culpes al lenguaje aquí, solo tienes que mantener tus alcances limpios.
  5. Eso = este es un patrón común en JS, por lo que no me sentiría mal por usarlo. En cuanto a ser ininteligible, “ese” es un nombre de variable bastante malo. ¿Qué fue “esto” en primer lugar? Nombra tu variable después de eso. En un constructor? ¿Por qué no nombrarlo “self”? ¿Es un elemento DOM? ¿Por qué no “elemento” o “el”? También puede evitarlo usando llamar, aplicar o vincular. De hecho, recomendaría leer sobre ellos, ya que saber lo que hacen le dará una buena comprensión de “esto” en JS.

Javascript no parece hacerte un mal programador tanto como un programador confuso. ¿Y usarlo hace que la gente se confunda? Todo el tiempo.

Estás entendiendo cómo funciona un nuevo idioma para ti. Para comprender completamente el poder de un lenguaje de programación, necesita conocer sus pros y sus contras, y eso es algo relativo; por lo tanto, la única forma de conocerlos es aprender otros lenguajes de programación. Si me preguntas, estás en un buen camino.

Sí, puede salirse con la suya con todo tipo de descuidos y nunca recibe una advertencia o un error. Uso el editor de Webstorm con todas las opciones de advertencia activadas. Madre, la primera vez que lo ejecuté en lo que pensé que era un programa bastante limpio, ¡encontró 440 advertencias y errores! Muchos de ellos eran triviales, pero aún un trozo era un código cuestionable real.

Debes usar la moderación real, ya que el lenguaje no te guía en la dirección correcta.

Javascript no está convirtiendo a nadie en un mal programador. Es solo que si alguien es un mal programador, Javascript no hace nada para evitarlo. Puedes hacer prácticamente cualquier cosa con Javascript y funcionará independientemente. Puede ser funcional, orientado a objetos o ambos con Javascript.

Sin embargo, veo la tendencia entre los programadores que solo conocen Javascript para escribir código extraordinariamente horrible con él. Luego se dan cuenta de cuán horrible es su código (cuando lo miran unos días después), buscan razones en Internet y todo lo que ven es esto:

  • Partes horribles de Javascript
  • Por qué cambiamos de Javascript a otra cosa (spoilers: Javascript es malo)
  • Javascript es tan malo que mis ojos literalmente comenzaron a sangrar
  • Javascript esto
  • Javascript que

Si bien algunos de ellos tienen algunos puntos válidos (como ámbitos, devoluciones de llamada y mierda), cuando utiliza un lenguaje FP y vuelve a Javascript, verá que en realidad está escribiendo un código mucho mejor en Javascript.

Al menos ese fue el caso para mí.

¡JS no hace un mal programador!

Para los globales, es hora de una limpieza, ya que no es seguro: en Chrome, vaya a las herramientas de desarrollo y abra la consola e ingrese: Object.keys (ventana); Una vez encontrado, límpialos.

Puede usar ‘===’ para asegurarse de que los vars sean exactamente lo mismo.

usar var Obj = esto es típico para mí, de modo que puedo hacer referencia a ‘esto’ dentro del alcance léxico de las funciones anidadas y lo que no. Muy útil para vistas de Backbone, etc.

Me parece que muchos de mis archivos JS tienden a parecerse. Para reducir la sobrecarga de mi desarrollo, me gusta usar estructuras de plantillas y esto me ayuda a reventar las cosas rápidamente. Comparo esto con la forma en que los poetas de la antigüedad (por ejemplo, Homero) usarían construcciones para ayudarlos a formular sus cuentos épicos. A veces puede hacer que la historia sea un poco repetitiva, pero la calidad no se cuestiona.

Espero que esto ayude.

¿El vehículo X te hace mal conductor? Depende del tipo de conductor que quieras ser.

Comprende que los diferentes idiomas tienen diferentes objetivos y que cada idioma tiene cosas que te gustan y cosas que no. No soy un desarrollador front-end y personalmente no me gusta mucho JavaScript, pero funciona bien para lo que está hecho.

No considero que JavaScript sea un lenguaje de programación, sino un lenguaje de script.

La respuesta para 2016 es usar TypeScript y un linter.

  • Prohibir var
  • Usar funciones de flecha gorda
  • Use === para todas las comparaciones excepto nulo (a veces está bien tratar indefinido y nulo como equivalente)
  • Use noImplicitAny, al menos cuando escriba un código nuevo

Te obligará a ser un mejor programador.

Estas son definitivamente buenas realizaciones y todas son ciertas. Creo que cada programador de Javascript estaba allí antes y se dio cuenta. Javascript tiene sus peculiaridades y si quieres (o tienes que) usarlo, debes aprender a vivir con ellos.

1) Sí, bueno, solo hay una pequeña diferencia y estoy de acuerdo en que no deberían existir. La mejor manera de detectar variables indefinidas es a través del operador typeof, ya que no arrojará errores.

2) No estoy seguro de por qué haces eso. Si te sientes incómodo con eso, conviértelo en nulo 🙂

3) No es exactamente un bucle for. Podría ayudar si separa esa función de iterador a un lado y usa solo _.each (blah, iterate). Entonces puede parecer más natural ya que lo verás como una función, no como un bucle.

4) Sé que muchas personas están en contra y será relativamente pronto obsoleto, pero CoffeeScript ayuda enormemente con los problemas de alcance y nada se escapa. También es posible que desee probar Browserify. Escribir código usando el sistema de módulos CommonJS básicamente cambia su forma de pensar acerca de las variables y el alcance global.

5) Si te importa el rendimiento, esta es solo una buena forma de hacerlo. De lo contrario, podría usar el método de enlace que lo hace mucho más limpio y comprensible. Sin embargo, ya hay implementaciones de enlace más rápidas que las nativas, por ejemplo. codemix / fast.js

No te preocupes, se asentará a tiempo. JavaScript es muy diferente a la mayoría de los idiomas en estos días. Pero está evolucionando y cambiando gracias a muchas personas con mucho talento.

Me parece que eres ‘flojo’ y quieres que las cosas no funcionen si no lo haces de la manera correcta, por lo que debes corregir tu código.

Usted elige cómo escribir su propio código y eso es lo que hace que JavaScript sea un excelente lenguaje para “aprender”, ya que puede hacer que las cosas “funcionen” con bastante facilidad.

Entonces, si desea ser ‘descuidado’ en su código sabiendo que no es la mejor manera, es su elección, sin embargo, algunos IDE ‘insinuarán’ un código incorrecto, WebStorm es uno.

Personalmente, trato de escribir, así que en 2-3 meses al menos puedo entender lo que está sucediendo y mejorar el código si es necesario.