Buenas noticias para todos. Todos los que trabajan con arrays y vectores, así que, todos los desarrolladores - disfrutará de las nuevas oportunidades: desde la compilación de Flash a finales de agosto de 2011, Realaxy ActionScript Editor (RASE) es compatible con el nuevo Colecciones Extensión del lenguaje AS3. En este post te mostraremos lo que puede hacer..
Una colección es un término general que significa, aproximadamente, "un montón de objetos tipificados de manera similar que se agrupan". La creación de una colección en ActionScript 3.0 se puede hacer mediante el uso de matrices, vectores, diccionarios u objetos; cada uno tiene algunos de los ingredientes de un concepto perfecto. Sin embargo, si tiene un conocimiento básico de cualquier lenguaje moderno y moderno como Scala, Groovy o Ruby, definitivamente sentirá la falta de un enfoque funcional en la forma pura de AS3 de procesar colecciones..
Bueno, vamos a introducir el Colecciones Extensión de lenguaje AS3 que está disponible en RASE Beta 10, compilación 8177+.
Un vocabulario completo de métodos complementados con muestras está disponible aquí: uno para listas y otro para mapas (estas son imágenes, desplácese hacia abajo, son realmente GRANDES).
Para no perderse en esta jungla, echemos un vistazo a algunos casos de uso simples. El primer ejemplo de vida real demuestra la concisión del código de colección:
Creamos un lista
, que solo puede contener En t
valores.
dónde
?).seleccionar
?).seleccionar
?).lista
y rastrear el resultado.Dónde
, seleccionar
, seleccioneMany
- Estas operaciones son fáciles de usar cuando estás creando una consulta..
Operaciones como todos
, alguna
, contiene todo
, y contiene
funciona perfectamente en frases condicionales (?Si
? declaraciones, etc.).
Para modificar una lista, tenemos una amplia gama de armas: retirar
, eliminar todo
, quitar Donde
, eliminarCabeza
, removeTail
, etc.
Para aquellas personas que definitivamente tienen un ojo para la perversión, hemos preparado un montón de operaciones como plegarse
/foldRight
, reducir izquierda
/reducir derecho
, intersecarse
, etc.
En pocas palabras, hay un montón de operaciones adecuadas para cada fantasía y casi todas las tareas. En algunas operaciones solo le transmites uno o más valores, en otras, agregas un cierre.
El lenguaje de la colección es intencionalmente simple. Es compatible con dos tipos: Lista
y Mapa
. Mapa
es bastante similar a un trivial Diccionario
que contiene algunos métodos útiles - llaves
, valores
, contiene clave
, contiene valor
(útil para controles y condiciones), pushMap
(para fusionar valores), removeKey
, eliminarValor
, etc.
Los mapas son inteligentes y seguros. No le permitirán agregar una clave o valor incorrecto:
Los mapas funcionan bien con cualquier lista y consulta.
También hay operaciones de conversión que se pueden utilizar para facilitar la incorporación de las nuevas extensiones de Colecciones a su proyecto real de ActionScript puro. Simplemente tome una matriz trivial (o vector) y aplique el .Listar
operación. Después de procesar una lista (o un mapa), siempre puede convertirla al estilo AS3 de la vieja escuela usando .toArray
o .toVector
.
Para demostrar cómo comenzar con estas colecciones, aquí hay una guía paso a paso basada en una situación trivial. Supongamos que su tarea es crear una lista de "usuarios sugeridos" para una cuenta de Twitter. Tenemos que procesar una colección muy larga de cientos o miles de objetos, para recuperar una lista corta (que coincida con una serie de criterios) y para aplicar alguna operación en cada elemento de esa lista corta.
No centraremos nuestra atención en interactuar con la API de Twitter, ya que nuestro objetivo es solo mostrar cómo comenzar con el Colecciones lenguaje y para mostrar las ventajas de un enfoque funcional en el trabajo con colecciones en AS3.
Crea un nuevo proyecto desde cero y llámalo Colecciones. Si esta es tu primera experiencia con el editor, te recomendamos que leas el Tutorial HelloWord de Janealaxy y / oRealaxy para principiantes.
Ahora necesitamos crear tres clases para almacenar la estructura de datos: Usuario
,яCuenta de Twitter
y Mensaje
. Podemos hacerlo desde la Generar
menú, que está disponible haciendo clic con el botón derecho en el código o presionando Ctrl + N.
Escriba el nombre de la clase en un cuadro emergente.
Saltar a la ja<
posición y golpeEntrar
.
Agregue los siguientes campos: nombre de usuario
, apellido
y carné de identidad
. El código se verá así:
Invocar el Ctrl + N menú de nuevo.
Aparecerá una nueva ventana emergente. Seleccione todos los campos recién creados y presione DE ACUERDO.
.Encadenar()
MétodoNo olvides añadir una presentación de texto a la Usuario
clase. Añadir .Encadenar()
método - artículo 5 de theяCtrl-N menú (igual que en la captura de pantalla de los pasos 2 y 6).
los Usuario
la clase esta lista Su código se verá así:
Usando el mismo proceso que los Pasos 2-9 tienes que crearCuenta de Twitter
яandяMensaje
clases.
я
NB: para evitar un error de tipo (como el que se muestra en la imagen de arriba), debe importar el Colecciones
idioma de theяCtrl + L menú:
NB2: яThe Cuenta de Twitter
y Mensaje
Las clases deben ser reticuladas. Para que esto suceda, después de importar el Colecciones
idioma, tienes que crear el Mensaje
clase, salta de nuevo a la Cuenta de Twitter
Clase y completa la línea que causó un error..
NB3: No te olvides de agregar getters, setters y un .Encadenar()
método.
Ahora es el momento de escribir algún código en Principal()
. Primero, necesitamos agregar algunos campos.
NB: Utilice el método abreviado de teclado Complete ()Ctrl-Shift-Space) para guardar un poco de tiempo mientras escribe estas frases:
Ya que nuestro tutorial es solo una demostración que muestra cómo trabajar con las colecciones en AS3, omitiremos la parte que hace referencia a cómo obtener estos datos de la API de Twitter..
Imaginemos que ya tenemos:
seguidores
,яseguido antes
,candidatosLongList
,candidatosCortoLista
, cual es la vacante en este momento.La tercera colección puede ser extremadamente grande, con cientos o incluso miles de artículos. Nuestro objetivo es aplicar una consulta sofisticada y, por lo tanto, cortar los elementos innecesarios según el principio de Buonarotti. Vi al ángel en el mármol y lo esculpí hasta que lo liberé..?
Salta a Principal()
яconstructor, y entrar en el яcandidatosLongList
con su método ?dónde
? (golpear Ctrl-Space para usar autocompletar como en la captura de pantalla a continuación):
Aparecerá la siguiente frase:
No te sorprendas, es solo un Cierre
, yeso
"es solo su parámetro.
Un cierre es, de hecho, la misma función anónima, pero con una serie de pequeñas diferencias.
Primero el Cierre
Tiene una sintaxis muy concisa. Los parámetros no tienen una declaración de tipo (para ser más precisos, la tienen, pero tales declaraciones están ocultas). El cierre tiene un comportamiento especial: la última declaración es un valor de retorno y rdquo, lo que significa que debe usar ?1;
? (en la última línea) en lugar de ?devuelve 1;
?
En segundo lugar, tiene una vista especial para los cierres de una sola línea: en tal cierre, se omite un punto y coma en el extremo (por dos razones: legibilidad y brevedad).
A diferencia de una función anónima (y también como un contador a los mencionados Arrays
y Vectores
), un cierre es tipo seguro. Eso significa que el autocompletado y la comprobación de tipos funcionarán en cierres.
Para concluir, un Cierre
Es un tipo de función sobre los esteroides. Tiene muchas características sabrosas que nos ayudan a escribir todo de forma rápida y concisa..
Volvamos a nuestro cierre inacabado. Agrega algún código que implementará nuestras "reglas". Este código devolverá una versión reducida de candidatosLongList
Eso no incluye a ninguno de nuestros seguidores:
Luego agrega otro criterio:
Teóricamente, la Colecciones El lenguaje te permite anidar muchas condiciones diferentes una por una. Agreguemos un criterio más (incluya a los usuarios que tienen 'Flash', 'ActionScript' o 'Adobe' en su campo Biografía) utilizando una expresión regular:
Seleccione toda la consulta y pulse Ctrl-Alt-V. Se introducirá una nueva variable..
Ahora somos capaces de hacer lo que queramos:
Luego copiaríamos el contenido de resultado
dentro candidatosCortoLista
.
Construye un módulo con Ctrl-F9 y echa un vistazo a la Salida ventana. El código AS3 puro generado de Principal()
se verá así:
package com.example import com.realaxy.actionScript.collections.util.CollectionsLanguageUtil; importar flash.display.Sprite; La clase pública Main extiende Sprite private var followers: Array = new Array (); var privado siguió antes de: Array = new Array (); private var candidatoLongList: Array = new Array (); private var candidatoShortList: Array = new Array (); función pública Main () // excluir a nuestros seguidores y usuarios seguidos por nosotros antes de // incluir a las personas con "Flash", "ActionScript" y "Adobe" en su biografía // agregarlos a la lista de recomendaciones this.candidatesShortList = CollectionsLanguageUtil .where (CollectionsLanguageUtil.where (candidatosLongList, función (n: TwitterAccount, se detiene: Objeto): Boolean return! CollectionsLanguageUtil.any (seguidores, función (f: TwitterAccount, se detiene: Object)): Boolean return f.user.id! = n.user.id;, esto, falso) &&! CollectionsLanguageUtil.any (seguido antes, función (f: TwitterAccount, se detiene: objeto): Boolean return f.user.id! = n.user.id;, this, false);, this, false), function (it: TwitterAccount, stops: Object): Boolean return /Flash|ActionScript|Adobe/.test(it.bio);, this, false); var names: Array = CollectionsLanguageUtil.select (candidatosShortList, function (it: TwitterAccount, stops: Object): String return it.user.username + "," + it.user.surname;, this, false); CollectionsLanguageUtil.forEach (nombres, función (m: Cadena, paradas: Objeto): void // TODO: haga algo con 'm', esto, falso);
Parece un poco ilegible, ¿eh? Especialmente comparando con nuestro código DSL:
La nueva extensión de lenguaje de Colecciones te permite: