Comportamiento Array JavaScript

Diferencias entre == y === en Javascript

===   y    !===

Son operadores de comparación ESTRICTA. Significa que si los operandos tienen TIPOS DIFERENTES,  no son iguales.

 

==   y    !==

Son operadores de comparación RELAJADA. Significa que si los operandos tienen TIPOS DIFERENTES,  Javascript trata de convertirlos para que fueran comparables.

 

Detalles del operador ==

La comparación x == y, donde x e y son valores, regresa true o false. Esta comparación se realiza de la siguiente manera:

  1. Si Type(x) y Type(y) son los mismos,
    1. Si Type(x) es Undefined, regresa true.
    2. Si Type(x) es Null, regresa true.
    3. Si Type(x) es Number,
      1. Si x es NaN, regresa false.
      2. Si y es NaN, regresa false.
      3. Si x es el mismo valor de Number que y, regresa true.
      4. Si x es +0 e y es −0, regresa true.
      5. Si x es -0 e y es +0, regresa true.
      6. Regresa false.
    4. Si Type(x) es String, regresa true si x e y son exactamente la misma secuencia de caracteres (con la misma longitud y los mismos caracteres en las posiciones correspondientes). En el caso contrario, regresa false.
    5. Si Type(x) es Boolean, regresa true, si x e y ambos son true o ambos son false. En el caso contrario, regresa false.
    6. Regresa true si x e y refieren al mismo objeto. En el caso contrario, regresa false.
  2. Si x es null e y es undefined, regresa true.
  3. Si x es undefined e y es null, regresa true.
  4. Si Type(x) es Number y Type(y) es String,
    regresa el resultado de la comparación x == ToNumber(y).
  5. Si Type(x) es String y Type(y) es Number,
    regresa el resultado de la comparación ToNumber(x) == y.
  6. Si Type(x) es Boolean, regresa el resultado de la comparación ToNumber(x) == y.
  7. Si Type(y) es Boolean, regresa el resultado de la comparación x == ToNumber(y).
  8. Si Type(x) es String o Number, y Type(y) es Object,
    regresa el resultado de la comparación x == ToPrimitive(y).
  9. Si Type(x) es Object y Type(y) es String o Number,
    regresa el resultado de la comparación ToPrimitive(x) == y.
  10. Regresa false.

 

https://es.stackoverflow.com/questions/331/diferencias-entre-y-comparaciones-en-javascript

¿Qué es una Kata y un Koan?

Koan

Definición literal:  en la tradición zen, un problema que el maestro plantea al alumno para comprobar sus progresos. Muchas veces el kōan parece un problema absurdo, ilógico o banal. Para resolverlo el novicio debe desligarse del pensamiento racional común para así entrar en un sentido racional más elevado y así aumentar su nivel de conciencia para intuir lo que en realidad le está preguntando el maestro. El koan mas famoso es:  «Este el sonido de dos manos, ¿cuál es el sonido de una sola mano?»

Definición en informática:

Ejercicio con código que no funciona y hay que corregirlo o completar algún parámetro para que funcione.

 

La idea de un Koan de programación es descargar un conjunto de ejercicios creados para una primera inmersión en un nuevo lenguaje, con una idea nueva a la vez. Cada ejercicio se completa y permite descubrir conocimientos que te servirán para nuevos ejercicios.

 

Kata

Definición literal:  Viene de las artes marciales, es una palabra japonesa que describe lo que en un inicio se consideró una serie, forma o secuencia de movimientos establecidos que se pueden practicar tanto en solitario como en parejas.

Repetir un ejercicio completo a partir de un ejemplo o unas directrices.

 

Definición en la informática: Es un pequeño problema de programación que persigue resolver un problema en un tiempo finito de unos 30 o 40 minutos.

El objetivo de estas katas es, por un lado, desarrollar nuestros propios algoritmos para resolver la kata en ese corto espacio de tiempos, y por otro lado, ver la solución que le da otra gente a ese mismo problema.

Además, estas katas son independientes del lenguaje, con lo cual, cada uno puede solucionarlas en el lenguaje que mejor le parezca.

Y para añadirle un poco más de emoción, se pueden implementar utilizando “Extreme Programming” por parejas.

 

https://www.genbetadev.com/metodologias-de-programacion/que-es-un-coding-dojo

https://picodotdev.github.io/blog-bitix/2014/12/ejercicios-katas-para-mejorar-habilidades-de-programacion-practicando/

http://manzanamecanica.org/2011/08/koans_una_tecnica_para_aprender_nuevos_lenguajes_de_programacion.html

https://altenwald.org/2016/08/07/koans-katas-y-etudes/

Instalación Jasmine Standalone (a pelo)

  1. Descargamos la distribución del Jasmine del siguiente enlace: https://github.com/jasmine/jasmine/releases
  2. Creamos en nuestro proyecto una carpeta llamada jasmine:
  3. Descomprimos el fichero zip :
  4. Colocamos la carpeta jasmine dentro de la carpeta principal del proyecto.
  5. Añadir a nuestros documento HTML las siguientes lineas:

*Nota: Donde están los {#.#.#} cambiarlo por la versión que hayamos descargado, por ejemplo 3.1.0

** Se nos quedan dos index.html, uno para los test y otro el index de la aplicación. En este caso se metio en la carpeta test.

En el archivo index.spec.js pondremos nuestros test

 

 

 

 

 

https://github.com/jasmine/jasmine#installation

Funciones, Código Limpio

 

NOMBRE

  • Deben ser verbos y los argumentos sustantivos
  • Deben ser pronunciables
  • Deben ser descriptivos
  • No preocuparse por la extensión del nombre, mas vale un nombre largo y descriptivo que uno corto y enigmatico.
  • No preocuparse en dedicarle tiempo a elegir un buen nombre.

ARGUMENTOS

  • Numero de argumentos ideal : 0
  • Máximo numero de argumentos: 3
  • Si hay gran cantidad de argumentos, desde el punto de vista de pruebas resulta muy complejo hacer todas las combinatorias posibles.
  • Argumento Indicador. No pasar booleano como parámetro a una función. Indicaría que hace mas de una cosa. Mejor dividir en dos funciones, una para cada caso.

TAMAÑO

  • Las funciones deben ser de tamaño reducido.
  • Mejor muchas funciones de tamaño reducido (3 o 4 lineas) que sean obvias.
  • Todas deben contar una historia y cada una debe llevar a la siguiente como contando una historia en orden atractivo.
  • No deben tener estructuras anidadas en su interior.

SWITCH

El buen uso de la instrucción switch se puede admitir si:

  • Aparecen una vez
  • se utilizan para crear objectos polimorficos
  • Se ocultan tras una relación de herencia para que el resto del sistema no las pueda ver.

ALCANCE

  • Las funciones solo deben hacer una cosa. Deben hacerlo bien y debe ser lo único que hagan. Sin efectos secundarios.
  • Solo debe o hacer algo o responder algo, pero no ambas cosas. O cambia el estado de un objeto o devuelve informacion sobre el mismo.
  • Una forma de saber que una función hace mas de una cosa es extraer otra función de ella, con un nombre que no sea una reducción de su implementación.
  • Debe mantener el nivel de abstracción dentro de la misma función.
  • Una función que procese errores no debe hacer nada mas. Si una función incluye try and catch no debe haber mas código después de ahí.

DUPLICACIÓN DE CÓDIGO

La duplicacion implica:

  • El doble de riesgo a errores
  • El doble de mantenimiento.
  • Con cualquier cambio habra que cambiarlo X numero de veces
  • Se empeora la legibilidad del codigo.

SOLO UNA ENTRADA Y UNA SALIDA

Las funciones solo deben tener una funcion return.

REGLA DESCENDENTE

El código debe leerse como un libro, de arriba a abajo. Ir de las funciones menos abstractas a las mas abstractas mientras bajamos en el código.

 

CREACIÓN DE FUNCIONES LIMPIAS

  • Primero se escribe el primer borrador. Este puede estar desorganizado, con funciones extensas y complicadas, con bucles anidados ….
  • Se hace va haciendo refactor del código poco a poco, mejorandolo. Se retoca el código, se divide las funciones, se cambian nombres, se elimina los duplicados, se reordena,….
  • Al final se consiguen funciones limpias. No se escriben al comenzar a programar. Es un proceso el cual hay que seguir.