BLOCCHI INCORPORATI LISTE (Lists Blocks)

Una serie di elementi, testo, numeri, colori, altre liste, legati tra loro formano una lista (o elenco). Se ci pensate bene una rubrica telefonica, il primo record (la prima riga) ha i suoi campi (volgarmente, le celle della tabella) legati tra loro perchè appartenenti alla prima voce. Quello che vedete in una rubrica (o in un foglio di Excel, o in una lista della spesa) è quasi sempre in forma tabellare:

Potenza ed essenza di una lista

Per comodità, come sempre, consiglio di appoggiarvi a una variabile per gestire al meglio le liste:
aggiungere items a una lista legata a una variabile

Elementi della lista inseriti attraverso le due caselle di testo TxtNome e TxtNumero

Per capire l’essenza e la potenza di una lista, provate questo bellissimo codice (sì, esiste una bellezza anche in un codice scritto bene) che permette di cambiare in maniera ciclica, il colore di sfondo di un bottone (Provatelo e nell’ interfaccia utente inserite solo un pulsante):
 

Conversione in CSV e altro

Per una maggiore compatibilità coi dati esterni, esistono le funzioni (da list to csv row in poi) di conversione da/a file in formato universale CSV (comma-separated values).
La lista e un tipo mutabile: puo essere allungata ed accorciata, e si possono modificare e cambiare i suoi elementi. Poichè l’oggetto cambia, tutte le variabili che vi si riferiscono “vedono” il cambiamento.
In AI2, al contrario di tutti i linguaggi di programmazione, non esiste un comando di ordinamento.
Anche sulla ricerca di valori uguali, non esiste una funzione già implementata. Ad esempio nella richiesta di mostrare tutti i Signori “Rossi” che abitano in una città.
App Inventor 2 Kodular ThunkableX
 
Fig.: Le tre liste dei componenti

create empty list

Crea un elenco vuoto senza elementi.

make a list

Crea un elenco dai blocchi dati. Se non si forniscono argomenti, viene creato un elenco vuoto, al quale è possibile aggiungere elementi in un secondo momento. Questo blocco è un mutatore . Facendo clic sul segno più blu, è possibile aggiungere ulteriori elementi all’elenco.

add items to list

Aggiunge gli elementi (items) dati alla fine dell’elenco. La differenza tra questo e append to list è che il secondo accetta gli elementi da aggiungere come un unico elenco mentre add items to list accetta gli elementi come singoli argomenti. Questo blocco è un mutatore , quindi se il blocco è singolo verrà aggiunto solo un elemento, se il blocco è composto da 3 elementi, verranno aggiunti 3 elementi in ordine all’ultimo già presente nella lista.

is in list?

Se l’oggetto è uno degli elementi dell’elenco, restituisce vero; in caso contrario, restituisce false. Notare che se un elenco contiene elenchi secondari, i membri degli elenchi secondari non sono essi stessi membri dell’elenco. Ad esempio, i membri dell’elenco (1 2 (3 4)) sono 1, 2 e l’elenco (3 4); 3 e 4 non sono essi stessi membri dell’elenco.

length of list – lunghezza della lista

Restituisce il numero di elementi nell’elenco.

is list empty

Se l’elenco non ha elementi, restituisce true; in caso contrario, restituisce false.

pick a random item

Seleziona un elemento a caso dall’elenco.

index in list

Restituisce la posizione del valore (things) nell’elenco. Se non nell’elenco, restituisce 0.

select list item

Seleziona l’elemento in corrispondenza dell’indice indicato nell’elenco indicato. Il primo elemento dell’elenco è nell’indice 1.

insert list item

Inserisce un elemento nell’elenco nella posizione specificata. Bisogna dichiarare prima il nome della lista da popolare, il valore dell’indice (che deve sempre partire da 1 ed essere crescente) e poi l’elemento (item) da inserire.

replace list item

Inserisce la sostituzione nell’elenco indicato nell’indice di posizione. L’elemento precedente in quella posizione viene rimosso.

remove list item

Rimuove l’elemento nella posizione specificata.

append to list

Aggiunge gli elementi nel secondo elenco alla fine del primo elenco.

copy list

Crea una copia di un elenco, inclusa la copia di tutti gli elenchi secondari.

is a list?

Se l’oggetto è una lista, ritorna vero; in caso contrario, restituisce falso.

reverse list

Inverte una copia dell’elenco con elementi nell’ordine inverso. Ad esempio reverse ([1,2,3]) restituisce [3,2,1]

list to csv row

Interpreta la lista come una riga di una tabella e restituisce un testo CSV (comma-separated values – valore separato da virgola) che rappresenta la riga. Ogni elemento nell’elenco di righe viene considerato come un campo ed è riportato tra virgolette nel testo CSV risultante. Gli articoli sono separati da virgole. Ad esempio, la conversione dell’elenco (abcd) in una riga CSV produce (“a”, “b”, “c”, “d”). Il testo della riga restituita non ha un separatore di riga alla fine.

list to csv table

da lista a tabella csv
Interpreta l’elenco come una tabella in formato maggiore di riga e restituisce un testo CSV (valore separato da virgola) che rappresenta la tabella. Ogni elemento nell’elenco dovrebbe essere esso stesso un elenco che rappresenta una riga della tabella CSV. Ogni elemento nell’elenco di righe viene considerato come un campo ed è riportato tra virgolette nel testo CSV risultante. Nel testo restituito, gli elementi nelle righe sono separati da virgole e le righe sono separate da CRLF (\ r \ n) Vedi caratteri speciali.

list from csv row

Analizza un testo come una riga formattata CSV (valori separati da virgola) per produrre un elenco di campi. Ad esempio, la conversione (“a”, “b”, “c”, “d”) in un elenco produce (abcd).

list from csv table

Analizza un testo come una tabella formattata CSV (valori separati da virgola) per produrre un elenco di righe, ognuna delle quali è un elenco di campi. Le righe possono essere separate da newline (\ n) o CRLF (\ r \ n).

lookup in pairs – Ricerca in coppia

Utilizzato per cercare informazioni in una struttura simile a un dizionario rappresentata come un elenco. Questa operazione accetta tre input:
  1. una chiave,
  2. una coppia di elenchi (pairs)
  3. e un risultato notFound, che per impostazione predefinita è impostato su “non trovato”.

Qui le coppie devono essere un elenco di coppie, ovvero un elenco in cui ogni elemento è esso stesso un elenco di due elementi. Lookup in pairs trova la prima coppia nell’elenco il cui primo elemento è la chiave e restituisce il secondo elemento.

Ad esempio, se l’elenco è ((name Hello Kitty) (age 41) (height 5 apples) (weight 3 apples)), guardando dall’alto “age” si restituirà “41”. Se non esiste tale coppia nell’elenco, lookup in pairs verrà restituito il parametro notFound . Se pairsnon è un elenco di coppie, quindi l’operazione segnalerà un errore. Ecco un esempio:

join with separator – Unisci con separatore

Unisce tutti gli elementi nell’elenco specificato dal separatore specificato, producendo testo di conseguenza.

OPERATORI FUNZIONALI DI LISTE (Functional List Operators)

La programmazione funzionale è un paradigma di programmazione in cui i programmi vengono costruiti componendo funzioni pure, evitando stati condivisi, dati mutabili ed effetti collaterali (side effects). Molti operatori nella programmazione funzionale sono comunemente usati per rendere il codice più conciso e meno complesso.

make new list (mapped)

Crea un nuovo elenco mappando ogni elemento nell’elenco di input a un nuovo valore usando l’espressione fornita. Il corpo Mapping each item to (Mappatura di ogni elemento a) è un’espressione che manipola ogni elemento nell’elenco. Utilizzare il nome della variabile specificato, ITEM, per fare riferimento all’elemento dell’elenco corrente.

make new filtered list

Crea un nuovo elenco mantenendo ogni elemento nell’elenco di input che soddisfa il test. Il corpo Keeping each item passing test (Mantenere ogni articolo che passa il test) è un’espressione booleana che controlla se un elemento supera il test. Se il corpo restituisce true, l’elemento viene aggiunto al nuovo elenco. Utilizzare il nome della variabile specificata, ITEM, per fare riferimento all’elemento dell’elenco corrente.

reduce list (to a single value)

Restituisce un valore accumulato riducendo l’elenco di input. Se l’elenco di input è vuoto, viene restituito initialAnswer. In caso contrario, answerSoFar (risposta fino ad ora) viene inizializzato su initialAnswer (risposta iniziale). Il blocco del corpo by Combining item and answer so far (Combinando voce e risposta finora) verrà valutato utilizzando answerSoFar e ogni ITEM nell’elenco di input.


sort list in ascending order

Crea un nuovo elenco ordinando l’elenco di input in ordine crescente. Questa è una procedura di ordinamento generica che funziona su elenchi di qualsiasi tipo. Raggruppa gli elementi dello stesso tipo e quindi li ordina di conseguenza all’interno dello stesso gruppo di tipi. L’ordine corrente dei tipi è booleani, numeri, stringhe, elenchi e quindi componenti. Per i valori booleani, false è definito come minore di true. I componenti vengono prima confrontati con i loro nomi di classe. Se sono istanze della stessa classe, i loro codici hash vengono utilizzati per il confronto.

sort list with a specified comparator

Crea un nuovo elenco dall’ordinamento dell’elenco di input in un ordine specificato dal corpo del blocco. Il corpo di questo blocco è un’espressione booleana che coinvolge item1 e item2 e restituisce true o false. Se il corpo restituisce true, item1 viene unito prima di item2 nell’ordinamento. Se il corpo restituisce false, item2 viene unito prima di item1 nell’ordinamento. Utilizzare i nomi delle variabili forniti, elemento1 e elemento2, per fare riferimento ai due elementi dell’elenco corrente che vengono confrontati.

sort list with key

Crea un nuovo elenco dall’ordinamento dell’elenco di input con i tasti in ordine crescente. Le chiavi sono valori proxy generati da ciascun elemento nell’elenco dal corpo di questo blocco.


minimum value in list

Restituisce il numero minimo nell’elenco di input.

maximum value in list

Restituisce il numero massimo nell’elenco di input.

all but first

Restituisce un elenco senza il primo elemento nell’elenco di input.

all but last

Restituisce un elenco senza l’ultimo elemento nell’elenco di input.

list slices

Restituisce un elenco tagliando l’elenco di input in corrispondenza dei due indici indicati. L’elenco restituito contiene gli elementi dell’elenco di input che inizia da index1 fino a index2 escluso.

Thunkable

Tabella di comparazione tra Thunkable a App inventor2, divisa per gruppo

Tabella di comparazione tra Thunkable a App inventor2, divisa per gruppo

Anche se AI2 ha molti più blocchi, Thunkable da parte sua ha blocchi che rendono la programmazione più semplice senza usare il costrutto For Each in List, e poi il Sort List lo ritengo fondamentale. Non esistono blocchi che si rifanno agli indici (index in list, insert list item).

Vediamo i blocchi che si differenzianoda AI2:

List of item repeated X Times

Crea un elenco di un determinato elemento ripetuto un numero specificato di volte.

List of numbers from X to Y

Crea una lista tra due numeri, con un incremento scelto.
Per esempio. l’elenco da 1 a 5 per 1 è [1, 2, 3, 4, 5]. L’elenco da 2 a 10 per 2 è [2, 4, 6, 8, 10]

Sort List

Il tallone d’Achille di AI2 è la mancanza di ordinamento e la ricerca di duplicati. Certo, coi blocchi di loop si può fare quasi tutto, ma perchè non implementare le operazioni ripettitive con blocchi già pronti? Fin quando non ci arriva dagli ingegneri del MIT, vi consiglio di sperimentare, provare e custodire gelosamente quelle parti di codice, vi serviranno sicuramente in seguito.

Se stai importando un elenco da un foglio di calcolo o da un’altra origine dati, potrebbe essere utile ordinarlo nella tua app. È possibile ordinare un elenco in ordine alfabetico o numerico, crescente o decrescente.

Sum, Min, Max, Averages, Standard Deviation, Random Item

Restituisce il risultato dell’operazione scelta su un elenco di numeri. Restituisce NaN se l’operazione non può essere eseguita sull’elenco di valori specificato.

Get Sub-list

Restituisce un sottoelenco di elementi tra due posizioni in un elenco più lungo.

Insert At/Set

Questo blocco INSERT inserirà un elemento nella posizione specificata o SET imposterà l’elemento nella posizione specificata sul nuovo valore.

 

Aggiornato al 01/01/2021
Aggiornato al 01/01/2021
Aggiornato al 15/02/2023

PDF Lista comparazione dei componenti di AI2 KODULAR THUNKABLEX agg.20210911

Vuoi avere più informazioni sul Coding visuale? Vai alla pagina dei Blocchi incorporati dove potrai imparare a scrivere il linguaggio di programmazione per App Inventor 2, Kodular e Thunkable X. Visita la pagina del Blog con le ultime notizie sulle le tre piattaforme. Nella pagina Documentazione troverai i collegamenti ai forum, il glossario, i link ai siti dei migliori programmatori, i download e tanti altri accessori.