Salut à tous;
J'aimerai savoir si l'équivalent .net "readonly" existe avec Delphi.Je voudrais créer une constante affectable à l'initialization et qu'on ne peut plus modifier par la suite.
Merci.
Salutations.
Salut à tous;
J'aimerai savoir si l'équivalent .net "readonly" existe avec Delphi.Je voudrais créer une constante affectable à l'initialization et qu'on ne peut plus modifier par la suite.
Merci.
Salutations.
Une constante ne convient pas ?
Salut Nono;
Entre autres j'ai un tableau de ce style
"TabEchec:array [TSide,TPiece,TCasesEchiquier,TCasesEchiquier]of boolean;"
que j'initialise au départ dans une boucle et que j'utilise à de nombreux endroits du code mais qui ne doit surtout plus être modifié.Sachant qu'il y a 7 TPiece et 64 TcasesEchiquier, on peut imaginer que créer une constante de TabEchec serait fastidieux.C'est pas grave je le laisse en var globale et ferais attention.
Peut être dans delphi 2010 , avec le 64bits en natif et biblio paralleleon peut rèver.
Salutations.
Bonsoir,
je n'est peut-être pas bien compris le problème, mais pourquoi ne pas utiliser une classe ? Elle possèderait en private ton array[TSide,TPiece,TCasesEchiquier,TCasesEchiquier]of boolean que tu chargerai par exemple dans le constructeur, puis elle publierait une méthode TabEchec( TSide,TPiece,TCasesEchiquier,TCasesEchiquier):Boolean qui retourne la valeur correspondante de ton array. Ainsi tu n'as à utiliser cet array que dans la classe et comme il est dans la partie private, il n'est de toute façon pas accessible aux autres classes (sauf si elles se trouvent dans la même unité).
@++
Dany
Mon Tutoriel sur le développement Intraweb
N'oubliez pas de consulter les FAQ Delphi ainsi que les Cours et tutoriels sur la programmation Delphi
Salut Skywaukers;
C'est pas vraiment un problème, c'était juste pour savoir s'il y avait l'équivalence.Je sais qu'il y a 1000 façons d'empecher l'accés au tableau mais j'essaie d'éviter les appels de fonctions en utilisant au max les constantes,la
vitesse étant la priorité dans mon cas.
Merci d'avoir pris le temps de me répondre.
Salutations.
Avec les propriétés et des méthodes d'accès en lecture marquées inline, le résultat compilé sera équivalent à un accès à un tableau.
sjrd, ancien rédacteur/modérateur Delphi.
Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
Découvrez Mes tutoriels.
As-tu fait des tests de comparaison, pour la vitesse d'exécution, entre la version où tu utilises une "constante", et la version où tu utilises un tableau dynamique et une méthode d'accès comme le suggère Skywaukers?
Le fait que le tableau soit alloué et accessible en lecture seule est une chose, le temps qu'on perd à accéder à une case en est une deuxième :
même si le tableau est une constante, lorsque tu tapes, dans ton code, un truc du style :
il faut bien que le programme puisse transformer les 4 variables "maCouleur", "maPiece", "maCase1" et "maCase2" en un offset dans le tableau.
Code : Sélectionner tout - Visualiser dans une fenêtre à part if TabEchec[maCouleur][maPiece][maCase1][maCase2] then ...
Ce qui veut dire que, dans le code assembleur produit, il doit y avoir, d'une manière ou d'une autre, un bout qui fait cette opération :
Entre le laisser produire par le compilateur et l'écrire toi-même dans une méthode inline, je ne pense pas qu'il y ait énormément de différence de performances.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ... LOffset := maCouleur * _Nb_TPiece_ * _Nb_Cases_ * _Nb_Cases_ + maPiece * _Nb_Cases_ * _Nb_Cases_ + maCase1 * _Nb_Cases_ + maCase2 ; TabEchec[LOffset] ...
Par contre, tu serais plus serein sur l'absence d'accès en écriture du résultat. Et ça, ce n'est pas négligeable, je pense.
Partager