Page 1 sur 1

[..] Déclaration d'un tableau à 2 Dimensions (pb syntaxe)

Posté : jeu. 24 mars 2011 21:02
par Nimrod76
Bonjour,

Je me suis lancé il n'y a pas longtemps dans la programmation Autoit, et c'est donc récemment que j'ai découvert ce forum d'entre aide qui m'a déjà bien aidé ! :D

Bref, j'ai un problème qui vous semblera certainement un peu bête mais qui me turlupine depuis 2 jours :

Je ne comprend pas pourquoi cette façon de déclarer un tableaux à 2 dimensions ne fonctionne pas :

Code : Tout sélectionner

Dim $tabA[3] = ["a1","a2","a3"]
Dim $tabB[3]= ["b1","b2","b3"]
Dim $tabC[3] = ["c1","c2","c3"]
Dim $tabD[3] = ["d1","d2","d3"]

Dim $Grille[4][3] = [ $tabA, $tabB, $tabC, $tabD]

 
En revanche de cette façon ça fonctionne :

Code : Tout sélectionner

Dim $Grille[4][3] =[ [ "a1","a2","a3"], [ "b1","b2","b3"], [ "c1","c2","c3"],  [ "d1","d2","d3"] ]
 
Pourquoi ces 2 méthodes ne sont elles pas équivalentes ? :?

Merci beaucoup !

Re: [..] Déclaration d'un tableau à 2 Dimensions (pb syntax

Posté : jeu. 24 mars 2011 23:46
par jchd

Code : Tout sélectionner

Dim $Grille[4][3] = [ $tabA, $tabB, $tabC, $tabD]
déclare un tableau de 4x3 mais initialise un tableau de 4x1

Par ailleurs, comme l'indique l'aide, les tableaux dans les tableaux sont généralement à proscrire et amènent toujours une complexité d'emploi.

Pour mémoire, si l'on déclare :

Code : Tout sélectionner

Dim $tabA[3] = ["a1","a2","a3"]
Dim $tabB[3]= ["b1","b2","b3"]
Dim $tabC[3] = ["c1","c2","c3"]
Dim $tabD[3] = ["d1","d2","d3"]

Dim $Grille[4][3] = [[ $tabA], [$tabB], [$tabC], [$tabD]]
on n'obtient pas ce qu'on croit voir :
► Afficher le texte

Re: [..] Déclaration d'un tableau à 2 Dimensions (pb syntax

Posté : ven. 25 mars 2011 03:00
par matwachich
Pour plus de compréhension, je dirai
► Afficher le texte

Re: [..] Déclaration d'un tableau à 2 Dimensions (pb syntax

Posté : ven. 25 mars 2011 09:01
par Iste
C'est la une "faiblesse" d'autoit, on ne peut pas coller directement de [] sur autre chose qu'une variable.
En claire, maFunc()[5] ne fonctionne pas, et dans le cadre d'un tableau de tableau, $var[0][5] ne fonctionnera pas non plus.
On est donc obligé de faire la différence entre les tableaux a plusieurs dimension et les tableaux de tableaux.

Re: [..] Déclaration d'un tableau à 2 Dimensions (pb syntax

Posté : ven. 25 mars 2011 18:03
par jchd
Oui, les tableaux AutoIt sont des "citoyens de première classe" et donc [n] n'est pas un opérateur "modificateur de type" comme dans d'autres langages. Du coup on ne peut certes pas écrire MaFonc($i)[3] mais on peut en revanche assigner une valeur (tableau) d'initialisation à une autre variable :

Code : Tout sélectionner

$ar[3] = [ 1, 2, 3 ]
$dup = $ar    ; fonctionne
C'est pourquoi il est presque toujours nécessaire de passer un tableau "ByRef" à une fonction, pour éviter sa duplication et même si la fonction qui l'accepte en paramètre ne le modifie pas. C'est à peu près indolore pour de tout petits tableaux, mais rapidement gourmand dès qu'on travaille avec un encombrement moins négligeable ou lors d'appels fréquents.

Re: [..] Déclaration d'un tableau à 2 Dimensions (pb syntax

Posté : ven. 25 mars 2011 21:00
par Iste
Ho, merci beaucoup pour cette info
Je me demandais justement pourquoi array.au3 utilisé autant le byref, sans sans servir.
Mais c'est vrai que vu comme ca, c'est logique !