jQuery[ejem]: map, each, html, attr...

Me acabo de enterar de que salio 1.6 (), y vi en por un twitt de @javahispano, que sacaron mejoraron una monadas como map y ... pues mejor revisa los Breaking Changes.

Decidí hacer un post de contenido jQuery. ¿Por qué?, pues por que no se donde poner mis aventuras con jQuery y recibir las opiniones de los expertos en la comunidad, también me interesa mucho saber que opinan de contenido que no es relacionado con la JVM. Tal ves otros usuarios de la comunidad han elegido no publicar material por ese motivo; no relacionarse con la JVM. Y lo entiendo y lo respeto por eso lo deje en la categoría 'Comunidad', pero uso jQuery con Java y me parece natural verlos juntos.

Bueno pues el objetivo es solo ejercitar las bondades de la API de jQuery, como map, each, etc., obteniendo elementos del DOM; todos los div's para modificar su atributo id así como su contenido.

Por ejemplo si tenemos un  , tomar un valor de un arreglo para ponerlo como su contenidos y su contenido ponerlo como su valor de id, para que quede algo como esto:  

Use la versión 1.6, pero también la probé con un par de versiones anteriores y funciona perfecto; en una de las ligas explica las mejoras en la version 1.6 en especial en $.map().

 
 

Explicación:
 : Esta función se encarga de que todo lo que este adentro sea cargado tan pronto como el DOM sea cargado y antes de que el contenido de la pagina sea cargado. A grandes rasgos, aquí metemos nuestro código que necesitamos para que el ejemplo funcione.

 
 : Es un selector de lo más simple. Un selector de este tipo, nos regresa un arreglo con todos los div's del DOM (object HTMLDivElement).

 : Va a crear un arreglo con los div's de todo el DOM.

 

 : Recorre todos los elementos de un arreglo de tipo jQuery, en este caso los divs.

 : En jQuery se lee de izquierda a derecha pero es un poquito más complicado que eso. Como nosotros tenemos elementos de tipo 'HTMLDivElement' en un inicio, necesitamos convertirlos a objetos tipo jQuery, eso es con  ,bueno, luego a su atributo id se asignan con la función  (), este 'id' sera el valor contenido en el 'div', como 1, 2, ..., eso lo logramos obteniendo el valor 'html' del objeto jQuery;

 (), y el valor de...mmmm, no pues no, esto esta más enredado que un mapa del DF.

Que tal si separamos el   para ver con claridad que sucede, las ligas necesarias ya las tienes ok:

 
Como pueden ver jQuery puede hacerlo todo en una sola sentencia o por separado.
Las ligas explican de forma detallada todos los conceptos.

Gracias por tu tiempo y todas tus sugerencias las tomo con mucho gusto.
Bye.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

+1 por ["juls", "ryz", "rem",

+1 por  

:)

A mi también me hace sentido ver cosas que van muy de la mano del desarrollo Java como precisamente JavaScript para paginas web, así que pues si!!! vientos.

Cool!...Muy buena info!

Cool!...Muy buena info!

Imagen de bferro

JavaScript y Jquery usando programación funcional

Lo que han aportado es muy interesante "per se" y también es relevante para ver la influencia de la programación funcional para resolver cosas como las que aquí han puesto.
Les dejo dos ligas (hay muchas) sobre la programación funcional en JavaScript y JQuery:
JavaScript as a Functional Language:
Functional vs. Object-Oriented JavaScript Development:

Imagen de rodrigo salado anaya

Gracias

Gracias Dr. Ferro, las ligas que puso son muy interesantes. Ya había leído algo al respecto y platicado también sobre este tema de que JavaScript es un híbrido.

Algo que me llamo mucho la atención de la primera liga fue: One of the most important and primary concepts in functional programming is that of code as data. What does this mean? Well, in most imperative languages, there is a distinction between data, the values that exist at a given place in memory, and programs, the set of processor instructions that manipulate the data. It's a natural thing to do, given the design of the Von Neumann architecture. In functional programming, this distinction is blurred: functions themselves are thought of as data, which can be passed around, returned from other functions, and manipulated directly.

Un ejemplo (copiado :), sería:
 

Por otro lado yo quiero entender de las funciones anónimas es que no se guardan valores en variable si no que las funciones anónimas (o offshoot of lambda calculus) generan y reciben resultados. Es un poco confuso para mi.

Y por ultimo a que se refiere: given the design of the Von Neumann , bueno en el libro Java concurrency in practice de Brian Goetz y muchos otros Gurus, en el capitulo 1, introducción dice algo como esto: In early timesharing system, each process was a virtual von Neumann computer; it had a memory space storing both instructions and data, executing instructions sequentially according to the semantics of the machine language, and interacting with the outside... , o para más corto esto , pero visto como un programa.

Esta liga esta padre para darme un acercamiento super soft de Haskell se las comparto si no la conocían

JavaScript según su creador,

JavaScript según su creador, es básicamente Scheme ( un dialecto de Lisp ) con piel de Java. Cuando lo crearon le forzaron a tener ese look and feel por que era el hit del momento y con las prisas no lo llegaron a terminar taaaaan bien.

Por ejemplo en JavaScript no existen las clases, sino que las funciones son el elemento principal de construcción. Sin embargo no es tan puro en el sentido que permite efectos colaterales. Aún así es muy interesante ver un lenguaje que estuvo mucho tiempo ahí en el explorer de pronto tomar tanta fuerza que hay quienes hablan incluso de una "era" de Javascript ( quzá no una "era" pero definitivamente es muy influyente).

Afortunadamente SpiderMonkey ( Firefox ) y V8 ( Chrome ) vinieron a liberar el poder de JavaScript de las garras y de IE :)


Imagen de bferro

Algunas cosas

Que la programación funcional no "distinga" entre datos y código quier decir muchas cosas.
Una de esas cosas es considerar a las funciones como ciudadanos de primera clase, con la autoridad para ser usadas en los lugares donde se espera cualquier "expresión": pasarla como argumento de funciones, devolverlas como resultado de una función y poder manipularlas directamente de la misma forma que manipulamos los datos.

El ejemplo que pones no es precisamente el de pasar una función como argumento a la función alert. Lo que recibe como argumento la función alert en tu ejemplo es una expresión lambda que se compone de la definición de la función y de la aplicación de la misma sobre los argumentos.

Debes entender a las funciones anónimas, como lo que simplemente son: funciones sin nombre; ni más ni menos.

Mucha gente confunde las funciones anónimas con las clausuras o closures. La confusión es común, porque las clausuras ocurren con frecuencia cuando las funciones anónimas definidas dentro de otras funciones hacen referencia a variables de la función outer (esas variables son libres para la función anónima). En el momento de la ejecución se produce entonces un cierre o clausura mediante un binding con el valor de la variable libre en el alcance léxico.

Hay lenguajes funcionales que van más allá del alcance léxico para realizar el binding.

La arquitectura de Von Neumann es la arquitectura de las computadoras "mortales" que existen desde la era de hielo. Es la arquitectura que seguramente estudiaste en tu materia de arquitectura de computadoras en la carrera. Cuando estudiaste que el corazón (o cerebro según el gusto) de una computadora consta de un cpu, una unidad aritmética y lógica, una unidad de control, un bus de datos y un bus de direcciones, te estaban describiendo una arquitectura Von Neumann. Además de esas cosas existe el concepto de "Programa almacenado" en una zona de memoria separada de la zona de memoria de los datos.
El modelo natural de computación de esa arquitectura es precisamente el que da lugar a los lenguajes imperativos, donde el método de computación básico es el asignar un valor a una variable después de la evaluación de una expresión. Es un método de computación diferente al de la programación funcional, donde ni tan siquiera existe el concepto de variable ( lo funcional puro).

Imagen de luxspes

@bferro: To be or not to be Homoiconic / Functional

Que la programación funcional no "distinga" entre datos y código quier decir muchas cosas.

Si es funcional, a fuerzas tiene que ser homoiconico.? Y si es homoiconico... a fuerzas tiene que ser funcional?

Imagen de bferro

@luxspes: Se la sacó de la manga

Si quieres aportamos sobre eso, pero creo que mejor en otro escenario

No necesariamente

No necesariamente, ejemplo claro Scala, no es homoiconico en lo absoluto ( quizá de ahí que los funcionales lo vean feíto )

Imagen de luxspes

@bferro: Mas bien lo tome de tu manga

Tu comentaste que:

Que la programación funcional no "distinga" entre datos y código quier decir muchas cosas.

De ahí yo hablara de homoiconicidad que se define como:

una propiedad de algunos lenguajes de programación, en los cuáles la representación primaria de éstos (código) es también una estructura de datos (datos) en un tipo primitivo del lenguaje.

Por lo tanto (o no?) un lenguaje homoiconico seria uno que "no distinga entre datos y código"... No? Mi pregunta iba en relación a si eso seria condición sufiente para que un lenguaje se volviera funcional (un lenguaje imperativo y homoiconico al no distinguir entre datos y código es por lo tanto también funcional?)

No entiendo por que dices que vino de mi manga cuando salió de la tuya? ;-)

Imagen de bferro

La homoiconicidad (hasta el nombre asusta)

Lo homoiconicidad es un tema interesante. Un lenguaje homoicónico es aquel que tiene las construcciones para poder expresar los datos y el código de manera uniforme, de la misma manera que en una máquina con arquitectura de Von Neumann sucede con el código de máquina.
Me tocó escribir hace algún tiempo escribir programas en ensamblador donde en el segmento de código reservaba espacio de datos,para de forma dinámica sobreescribirlo con funciones en ese espacio dependiendo de lo que quería hacer. Lo anterior no quiere decir que el lenguaje ensamblador sea homoicónico, En Java se pueden hacer cosas similares de una manera distinta.

Aplicar la propiedad de homoiconicidad a los lenguajes de programación es una discusión que no tiene fin. En se refleja esa discusión. Por cierto, para los que no lo conocen, ese wiki es uno de los más vistos y de hecho el pionero de los wikis, inventado por Ward Cunningham, un tipo de renombre en el mundillo de la programación orientada a objetos y otras cosas más. Tiene ese wiki el famoso "Portland Pattern Repository que es referencia obligada para discutir los patrones de diseño.
Lisp es uno de los lenguajes que siempre se toma como ejemplo de un lenguaje homoicónico. en Lisp, todo es una expresión S, sin distinguir código y datos.
Si leen el wiki antes mencionado y navegan en él para revisar todo lo que sobre homoiconicidad se escribe ahí, podrán percatarse de la cantidad de opiniones contradictorias sobre el tema. De hecho, uno de las discusiones se refiere a la necesidad de buscar una nueva definición de lenguajes homoicónicos. Hay que tener en cuenta que la definición original tiene muchos pero muchos años, mucho antes de que se inventaran nuevas cosas en los lenguajes de programación.
Respondiendo a la pregunta de @luxspes que aquí copio:
¿Un lenguaje imperativo y homoicónico al no distinguir entre datos y código es por lo tanto también funcional?
Mi respuesta es que si el lenguaje es imperativo entonces no es funcional aunque tenga todos los homos que quiere porque su método de computación es la asignación a variables producto de calcular el valor de una expresión y ese no es el método de computación de la programación funcional que como sabemos es la aplicación de funciones, tal y como aplicamos las funciones matemáticas para resolver un problema.

En mi post dije: "Que la programación funcional no "distinga" entre código y datos quiere decir muchas cosas ..........",

Imagen de luxspes

Mi respuesta es que si el

Mi respuesta es que si el lenguaje es imperativo entonces no es funcional aunque tenga todos los homos que quiere porque su método de computación es la asignación a variables producto de calcular el valor de una expresión y ese no es el método de computación de la programación funcional que como sabemos
es la aplicación de funciones, tal y como aplicamos las funciones matemáticas para resolver un problema.

Entonces... un lenguaje funcional solo es funcional si es "purely functional" ?

Imagen de bferro

Así es: eres o no eres

Para los puristas de FP así es, pero yo soy impuro repleto de pecados y creo que la incorporación de técnicas de FP en otros paradigmas es algo muy útil como hasta el sol de hoy se ha demostrado. Lo que será mañana quien sabe: como dice Oogway plagiando el dicho: El pasado es historia, el futuro un misterio pero el hoy es un regalo, por eso se llama presente.
¿y tu que crees?