La publicación de Fred la semana pasada fue sobre filtrarse publicando matriz y ordenándolos. Utilizó Matrix y luego usó la función Foreach Usort () PHP para obtener una lista de publicaciones alfabetizadas con comentarios abiertos. Esto me hizo pensar un poco sobre un tema que toqué brevemente en mi resumen del ecosistema JavaScript: la programación funcional. La programación funcional es una de las cosas más interesantes y valiosas que he comenzado a entender en los últimos años. Creo que la programación funcional es una de las cosas más interesantes y valiosas que he comenzado a entender en los últimos años. Sin embargo, no es para todos y no siempre es tan relevante trabajar con WordPress. Pero en realidad brilla cuando haces cosas como el procesamiento y la clasificación de matrices en el PHP (nuevamente, como el artículo de Fred ha proporcionado una forma de hacerlo) de una manera más compacta y fluida. Así que mi esperanza es explicar un poco más de la teoría de esta “palabra de moda” extraña, también dándole usos concretos y prácticos a los que puede aplicar.
Un resumen rápido de los paradigmas de programación de Foreach es el procedimiento para filtrar una matriz de foreach es muy “procedimiento”. Es decir: describimos al intérprete PHP exactamente en cada paso a través del cual debe pasar y que debería ser cada estado intermedio. Los bucles foreach de PHP son una de las cosas más útiles que un programador aprende temprano. El lenguaje a su alrededor: “Para cada uno de los elementos de esta lista, haga la acción en el interior”, es fácil comenzar a comprender, algo más fácil que los conceptos de programación funcional más simples que cubriremos hoy. Para comenzar a ser específicamente, copiaremos Un código en el artículo de Fred. Intentó crear una lista de publicaciones con comentarios abiertos y cerrados y procedió de la siguiente manera: $ POSTS_BY_COMMENT_STATUS = Array (); Foreach ($ publicaciones como $ post) {$ posts_by_comment_status [$ post-> comment_status] [] = $ post; } El resultado fue una matriz con dos índices: abierto y cerrado, con una serie de posiciones debajo de cada una. Esto es bastante efectivo como una forma de crear ese resultado. También es una forma muy “de procedimiento” de hacer esto. Es decir: describimos al intérprete PHP exactamente en cada paso a través del cual debe pasar y que debería ser cada estado intermedio. Si la paralelización (realizar esta tarea en paralelo con muchos procesos diferentes) sería posible en el PHP, esto no sucedería aquí, porque definimos el procedimiento como una iteración lineal a través de una matriz al insertar elementos secuencial en otro.
Este método también se basa en datos desde fuera del bucle foreach, principalmente $ Post_By_Comment_Status que se crea antes y luego se usa dentro del bucle. De esta manera, la “acción” del bucle foreach tiene conocimiento sobre lo que está fuera de él. Esto es común en la programación de WordPress, pero hace que la acción dentro de cada “foreach” en el sentido de que conoce e influye en el mundo en el que vive. Array_filter es funcional para lograr el mismo objetivo básico: genere una lista de publicaciones cuyos comment_status están abiertos y otra lista cuyos comentarios están cerrados: podríamos usar una llamada a la función PHP array_filter. Mostraré rápidamente la banda-ayuda de cierre de código, y luego lo ralentizaremos y lo explicaremos todos los conceptos. ‘;}); $ POSTS_WITH_OPEN_COMMENTS = array_filter ($ post, function ($ post) {return $ post-> comment_status == ‘Open’;}); Ahora, este código funciona solo en PHP 5.3 y superior, pero lo escribí de esta manera, porque la mayor parte del código de WordPress hoy está bien con esta suposición, y el modo compatible 5.2 es un poco más difícil de entender por primera vez. (Para aquellos que necesitan, pasaremos como el segundo argumento los nombres de las funciones que se definen por separado donde la función () {}.)
¿Qué hacemos en este ejemplo? Utilizamos la capacidad de filtrar una matriz para hacer una nueva matriz solo con los elementos que queremos. ¿Cómo está sucediendo este filtrado? Veamos más de cerca a Array_Filter (). Como array_filter (). En PHP, Array_Filter necesita dos argumentos (y puede aceptar tres). Son: la matriz de elementos que desea filtrar.
La función que desea usar para realizar el filtro. Esta característica debe devolver verdadera los valores que los filtros deben pasar y falsos para los que eliminará.
(Opcional) Un indicador para transmitir a la función solo las teclas o las teclas y los valores de matriz. El valor predeterminado, que usamos aquí, es solo la transmisión de valores.
Entonces, aquí podemos obtener una matriz de publicaciones con comentarios cerrados, pasando como segundo argumento una función que devuelve el resultado de una comparación entre la cadena ‘cerrada’ y el valor de la cadena (ya sea ‘abierto’ o ‘cerrar’)) ¿Cuál será el valor del estado de comentario de la publicación? Esas publicaciones cuyo estado de comentarios está ‘cerrado’ verán un verdadero regreso de la función de filtro y se mantendrán. Aquellos que no regresen falsos y, por lo tanto, serán arrojados. Entonces podemos hacer lo contrario para abrirlos con comentarios.
Suponiendo que realmente quería ambos conjuntos, no solo aquellos en uno u otro estado, la necesidad de hacer Array_Filter dos veces es un poco ganador para el método de procedimiento. Pero, por lo general, para mí, un foreach solo mantiene un pequeño subconjunto y exactamente eso es Array_Filter. ¿Qué es funcional en este ejemplo? Lo principal que es “funcional” en nuestros ejemplos es que pasamos una función en otra función: array_filter (). Uno de los errores más comunes que las personas realizan después de haber encontrado la programación “funcional” como concepto es que solo tiene funciones. Personalmente, pasé más de un año en mi vida, creyendo que hago una “programación funcional” genial y de último minuto debido a este malentendido. Lo principal que es “funcional” en nuestros ejemplos no es solo que usamos la función de palabras clave (¡toda la programación de WordPress debería hacer esto!), Sino que entramos en otra función: pasamos nuestra función sin nombre. (que podría tener un nombre como returnns_true_if_comment_status_is_open ()) en array_filter () como el segundo argumento.
Otra cosa que debe ver es que la función que transmitimos es “estancada”: no conoce el resto del código y no la necesita. Solo sabe que recibe un objeto $ post como entrada y solo necesita ese objeto para determinar qué hacer. De esta manera, se dice que la función es “pura” o “matemáticas”. (Por el contrario, las funciones “de procedimiento” casi nunca son “apatride”: sus procedimientos solo tienen sentido cuando el mundo está en una configuración dada que no está explícitamente elaborada y debe ser construida por el programador. Un ejemplo modesto es la matriz vacía Fred. Creado al comienzo de su freach.) Filtro () es una de las mejores puertas de puerta de enlace en la programación funcional, porque debe comenzar a comprender que las funciones pueden ser muy pequeñas, muy cortas y muy simples. Indica los beneficios expresivos que puede obtener de este tipo de compacidad simple cuando se pasa las funciones entre sí. El código de procedimiento, tan común en WordPress, se caracteriza por funciones de 10-100 líneas. Salir de este hábito con algo como Filter es una excelente manera de comenzar. La transformación de los elementos en la matriz con un mapa del filtro y las operaciones del mapa son las puertas canónicas en la programación funcional, por lo que tengo que traer el mapa.
Las operaciones de filtro y mapa son puertas canónicas en la programación funcional, por lo que tengo que traer mapa.Para hacer esto, podemos continuar abordándonos la idea de Fred de obtener publicaciones, filtrándolos y luego alfabeto.Pero haré un poco de trampa para mantenerse simple: la captura de pantalla de Fred muestra solo nombres, no enlaces y no otros datos de publicación que probablemente requieren en el mundo real.Pero, por ejemplo, esta simple necesidad hace que sea mucho más fácil usar Array_Map () para cumplir con nuestro objetivo.Entonces haremos trampa.Obtendremos una lista alfabética de publicaciones, sin usar la función Usort muy útil utilizada por Fred.(Es posible que no haya notado, pero Usort () en sí mismo es “funcional”: pasar una función sin un estado como argumento a otra función.) Usaremos Array_Map () y la característica muy simple () del PHP a Labetate By Post de título.
Usando Array_Map aquí hay un borde aproximado de PHP: el orden de los parámetros en ARRAY_FILTER y ARRAY_MAP es opuesto. Donde Array_Filter espera su matriz y luego su función, Array_Map quiere su función y luego su matriz considerando esto, podemos crear una serie de títulos de publicación a partir de una serie de publicaciones con un fragmento simple como este: $ list_of_itles = array_map (función ($ ($ post) {return $ post-> post_title;}, $ publicaciones); Nuevamente, utilizamos una pequeña característica para hacer una operación dentro de otra función. Pienso en el mapa como un pequeño trabajador: envíe la función que envía al mapa en su lista y haga la transformación de cada elemento de esa lista. Para obtener una matriz en la que cada elemento era doble en comparación con el valor anterior, su función de mapeo sería un simple rendimiento $ número*2; . Entonces, para nosotros, la función se hace cargo de cada elemento $ post y obtiene su propiedad post_title. Resulta una matriz con un orden idéntico, pero con solo los títulos de publicación en los lugares donde todos los objetos de publicación estaban en la matriz original. Sort () en breve PHP puede alfabetizar para usted; Sort () lo hace. Sort () toma una matriz y cambia esa matriz para ordenarse alfabéticamente. Lo único que merece atención es otra rareza del PHP: clasificar los cambios (“en su lugar”) lo que entrega y devuelve verdadero o falso, dependiendo del hecho de que puede o no poder hacer la clasificación. Este ejemplo resalta el problema que tengo regularmente: $ fruits = array (“limón”, “naranja”, “plátano”, “manzana”); $ Seed_fruits = Sort ($ frutas);

Lo que esto produce: frutas [0] = frutas de manzana [1] = frutas de plátano [2] = frutas de limón [3] = naranja sorted_fruits = true al notar el problema, porque si intenta usar $ sorted_fruits, se sentirá bastante frustrado de eso es cierto y no tu matriz ordenada. De lo contrario, el tipo es bastante simple: ordene las cuerdas en una matriz alfabética. La combinación de mapeo y clasificación ahora que entendemos tanto array_map () como sort (), solo tenemos que combinar los dos para obtener una matriz alfabética: $ list_of_itles = array_map (function ($ post) {return $ post -> post_title; }, $ publicaciones); Sort ($ list_of_titles); Ahora $ list_of_titles contendrá todos los títulos en la matriz de $ publicaciones, en orden alfabético. Solo para hacer un punto nuevamente, la inteligencia entre ustedes habría pensado (como lo hice cuando reuní el código de ejemplo): ¿Por qué no se ajustan simplemente () alrededor de Array_Map () y no me guardo una línea? La razón es nuevamente, como hemos llegado en nuestra sección sobre el sort (), que entonces $ list_of_titles solo tomaría el valor de verdad, lo que sería completamente inútil para usted. Ahora puede filtrar y mapear la programación funcional es una herramienta muy útil para algunos trabajos, y filtrar una lista de artículos es uno de los más claros. La programación funcional es algo divertido y una herramienta muy poderosa para muchos tipos de problemas. A diferencia de la impresión de que un lector podría tener razonablemente de mi escritura al respecto, no creo que sea el nuevo calor que todo desarrollador de WordPress debe conocer;
homefinance blog