scan ... by est une structure de contrôle puissante inventée
avec Scriptol et elle peut remplacer par deux ou trois lignes, une page
de code qui serait requise par les langages plus anciens.
Syntaxe: scan tableau [, tableau]* (by fonction | bloc d'instruction
/scan)
Ce qui signifie:
Scanner les tableaux élément par éléments
et les utiliser comme paramètres d'une fonction ou d'un bloc d'instructions.
Cas d'une fonction
scan a, b, ... by fonction
Ou a, b, etc... sont des tableaux et fonction une fonction définie
par l'utilisateur.
Chaque élément des tableaux a, b, ... sont à tour de rôle
donnés en paramètre
à une fonction et traités ensemble par celle-ci.
Quand le dernier élement est atteint dans un des tableaux, le traitement
se termine.
Cas d'un bloc d'instructions
scan a, b, ...
... instructions... /scan
Ici les éléments des tableaux ne sont pas traités par une fonction, mais
plutôt par le bloc d'instructions qui suit. Le mot clé by
n'est pas utilisé.
Exemple de scan par un bloc d'instructions.
L'élément suivant de a est concaténé avec
celui de b, et le résultat est empilé dans le tableau
c. |
array
a = array(1,2,3,4,5,6) array b = array("a","b","c","d") array c = array() scan a,b
c.push(b[] + str(a[])) /scan
c.display() |
Affiche: |
>
array (
"a1",
"b2",
"c3",
"d4"
) |
L'index vide [] désigne l'élément actuellement pointé dans une liste.
On peut aussi l'utiliser dans un assignement.
Reprenons le tableau a précédent:
Utilisation de l'index courant en assignement
augmenté. |
array
a = array(1,2,3,4,5,6)
scan a
a[] * 10 `l'élément
suivant est multiplié par 10 /scan
a.display() |
Affiche: |
>
array (
"10",
"20",
"30",
"40",
"50",
"60"
) |
Tableau à deux dimensions
On crée un tableau à deux dimensions en utilisant un tableau
à une dimension dont les éléments sont des tableaux.
Voici un exemple pour créer et parcourir un tableau à deux dimensions.
Ce tableau contient en fait trois dyn (variable dynamique) qui contiennent
chacune un tableau.
Création et parcours d'un tableau
à deux dimensions. |
array
a2 = array(
("a", "b", "c"),
("x", "y", "z"),
(1, 2, 3) )
scan a2
// conversion pour mettre chaque
tableau en en x
array x = a2[].toArray() scan x
print x[] /scan /scan |
Il aurait été plus simple d'avoir à éviter la création du tableau
temporaire x, ceci peut être fait dans cet exemple (en utilisant la syntaxe
simplifiée à instruction unique): scan aa
scan aa[] print aa[][] /scan
Ceci fonctionne avec le compilateur natif solc, mais malheureusement,
l'interpréteur Php ne le permet pas et donc solp ne peut l'utiliser.
Exercices |
1) Créer avec la structures scan, un tableau à deux
dimensions dont les deux lignes ont les préfixes a et b,
et les 5 colonnes les suffixes 1 à 5.
Le tableau de départ est:
array x = array(
("a","a","a","a","a"),
("b","b","b","b","b"))
Vous aurez besoin des éléments suivants:
- inclure "libphp.sol", aide à gérer les
fonctions prédéfinies.
- str convertit en entier en text.
- les éléments d'un tableau sont des dyn qui doivent
être convertis en types (text, etc...).
Afficher le tableau x modifié, avec la méthode de
tableau display().
Réponse
2) En utilisant des boucles for au lieu de scan, et les fonctions
prédéfinies chr() et ord(), créer le même
tableau à deux dimensions en partant d'un tableau vide.
Réponse
3) Même problème, si on dispose au départ des
trois tableaux suivants:
array x
array l = ("a", "b")
array c = (1, 2,3,4,5)
Réponse
|
|