|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
Sujet : Pourquoi initialiser une variable locale? [ Algorithme / Maths ] (khawarizm)
Informations & options pour cette discussion
samedi 1 décembre 2007 à 01:13:25 |
Pourquoi initialiser une variable locale?

khawarizm
|
Hi ; j'ai une question
SVP
.
En parcourant le forum et dans le topique sous-titré " calcul arithmétique"
notre cantador adoré à fourni un code qui a été accepté.
Le code
procedure
TForm1.Button1Click(Sender: TObject);
var
str: string;
i, total: integer;
begin
Total := 0;
str := '95HELLO';
for i := 1 to Length(str) do
total := total + Byte(Str[i]);
ShowMessage(IntToStr(total mod 256));
end;
:
Dans ce code
fourni par cantador
la variable locale totale est initialisée à
zéro (et moi qui pensai
qu'une variable integer sous Delphi est initialisée à zéro au moment de sa
déclaration ) alors j'ai tester le code en enlevant
l'initialisation et à ma surprise le résultat à changer !!! ce qui veut dire
que l'initialisation là n'était pas fortuite ; j'ai bien lu et relu le
code cherchant à comprendre le pourquoi du comment mais je n'ai rien piger ce qui ma amener à chercher sur les
sites qui parlent de Delphi mais mes
recherches ont été infructueuses et j'ai
le sentiment que je « zappe » quelque chose d'important mais
quoi au juste  MERCI à vous .
|
|
|
samedi 1 décembre 2007 à 02:37:40 |
Re : Pourquoi initialiser une variable locale?

Caribensila
|
Réponse acceptée !
Salut Khawa,
1) Une variable est un identificateur qui représente le contenu d'une adresse mémoire. Si elle n'est pas initialisée, elle peut représenter tout et n'importe quoi, que contient cette adresse mémoire. Et c'est souvent n'importe quoi, d'ailleurs. La déclaration de variable réserve une adresse mémoire, et l'initialisation la remplit.
2) Tu sais aussi qu'en Delphi, il y a : - les variables globales - les variables locales
Si tu n'initialises pas explicitement une variable globale, le compilateur l'initialisera à 0 ou à nil, comme tu disais. Mais l
es variables locales, par contre, ne peuvent pas être initialisées dans leur déclaration et contiennent donc des données aléatoires tant qu'elles ne sont pas initialisées.
Tu peux aussi initialiser une variable globale comme ça : var X : Integer = 100; Par contre, il n'est pas possible de faire ça avec une variable locale. C'est pour cette raison que notre 'Cantadoré' a agi ainsi :)))
@+
|
|
|
samedi 1 décembre 2007 à 03:32:50 |
Re : Pourquoi initialiser une variable locale?

khawarizm
|
Salut cari ; et bien mon ami j'étai toujours induit en
erreur et je pensai que c'était valable pour les deux genres de variables (c'est-à-dire
que le compilateur Delphi s'encharge de l'initialisation dans les deux cas ) et
il à fallu ce code pour me rendre compte de mon erreur et qu'au moment où je commençai à croire que je suis enfin prêt à passer à un
autre niveau je me rend compte que je devrai recommencer toute mon initiation de Delphi et revoir les bases
Merci mon ami .et à d'ici quelques mois.
|
|
|
samedi 1 décembre 2007 à 11:34:42 |
Re : Pourquoi initialiser une variable locale?

florenth
|
Réponse acceptée !
Salut ! En fait, si le compilateur Delphi n'initialise pas les variables locales, c'est sûrement pour une raison de performances. Et puis, dans une procédure, tu peux initialiser trois lignes plus loin, ce qui n'est pas gênant, contrairement à une variable globale qui demanderait une clause d'initialization pour pouvoir être... initialisée justement. Sinon, y'a quand même l'exception qui confirme la règle: les chaînes longues (string) qui sont initialisées à '' (chaîne vide). Ceci grâce au compteur de référence (un truc complètement transparent pour nous mais qui fait des prouesses de malade - comme par exemple libérer la mémoire des chaînes ^^). Je crois aussi que c'est le cas pour les tableaux dynamiques, mais là, je ne m'avance pas trop... Reste à savoir si c'est le cas pour toutes les versions de Delphi. Et non, tu n'as pas toute ton initiation à refaire ! Juste quelques trous à combler. Mais c'est normal, et d'ailleurs ce forum est là pour ça ! Bientôt, c'est toi qui mettra les autres sur la voie ! Sur ce, Bonne prog' ! Flo Ressources Delphi, sources, tutoriaux, actu, ...: www.mx-dev.net [ Lien ]
|
|
|
samedi 1 décembre 2007 à 11:52:23 |
Re : Pourquoi initialiser une variable locale?

cirec
|
Réponse acceptée !
Salut, rassure toi ... personne ne peut prétendre tout connaitre. Mais si tu avais activé les conseils et les avertissements du compilateur il t'en aurait informé avec un message : Voici un exemple de function qui déclenche conseils et avertissements: Function test : Boolean; Var A, B, C : Integer; Begin A := 0;
A := B * C; Result := A <> B End; Highlighted with Pas2HTML
[Pascal Conseil] UMain.pas(37): H2077 La valeur affectée à 'A' n'est jamais utilisée [Pascal Avertissement] UMain.pas(38): W1036 La variable 'B' n'est peut-être pas initialisée [Pascal Avertissement] UMain.pas(38): W1036 La variable 'C' n'est peut-être pas initialisée On peut donc dire que toutes les initialisations ne sont pas nécessaire. Ici La variable A n'a pas besoin d'être initialisée puisqu'elle reçoit une valeur à la ligne suivante Pour ne plus avoir de message du compilateur il faudrait faire par exemple : Function test : Boolean; Var A, B, C : Integer; Begin B := 10;
C := 5; A := B * C; Result := A
<> B End; Highlighted with Pas2HTML @+ Cirec
|
|
|
samedi 1 décembre 2007 à 13:07:19 |
Re : Pourquoi initialiser une variable locale?
|
samedi 1 décembre 2007 à 14:50:12 |
Re : Pourquoi initialiser une variable locale?

Guillemouze
|
Réponse acceptée !
comme le dit cirec, si tu utilise une variable sans l'avoir initialisé, tu aura un avertissement. et il est TRES IMPORTANT que quand tu compiles ton projet, tu ai 0 conseil et 0 avertissements (ils sont pas la pour rien), sauf bien sur a des etapes intermediaires de developpement. Attention tout de meme, le compilateur delphi n'est pas magique, il te trouvera un avertissement pour le code suivant
procedure AProcedure; var x, y: integer begin if monBooleen then begin x := 3; end;
y := 5;
if monBooleen then begin y := x + 3; // ici avertissement (x non initialisé), il ne detecte pas que x es forcement initialisé si monBooleen est true. end; end;
|
|
|
dimanche 2 décembre 2007 à 11:53:21 |
Re : Pourquoi initialiser une variable locale?

khawarizm
|
Bonjour ; Merci Guillemouze , tu à parfaitement raison j'avais la facheuse habitude de négliger, a tort bien sur , les messages et les commentaires générés par le compilateur du moment que ça compile et que sa marche mais plus maintenant , je suis entrain de chercher sur l'aide de Delphi et un peu partout les messages d'erreur générés par Delphi et leurs significations et je découvre que c'est une autre source d'apprentissage pour bien programmer en Delphi . Merci et bonne journée à tous .
|
|
|
lundi 3 décembre 2007 à 09:19:32 |
Re : Pourquoi initialiser une variable locale?

Loda
|
@Guillemouze:
en passant: si monboolean est global et que tu as un autre thread, la valeur peut changer entre le debut et la fin de ta méthode. (le compilo a raison, ou disons qu'il est prudent. Note que l'exemple serrait correct si monbolean est un parametre de ta procedure.)
bon code,
Loda
Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
|
|
|
lundi 3 décembre 2007 à 21:47:51 |
Re : Pourquoi initialiser une variable locale?

Guillemouze
|
@loda: ouais, en fait, j'etais parti sur un simple bout de code que j'ai finalement encadré par une procedure, et j'ai oublie de mettre monBooleen en var ;)
|
|
|
Cette discussion est classé dans : code, variable, str, total, locale
Répondre à ce message
Sujets en rapport avec ce message
Executer du code texte [ par Niki2001 ]
Est-il possible d'exécuter du texte (sous forme de string) qui, évidemment, représenterait un code Delphi correct? Exemple:var Str: string; i: int
prob Transtipage [ par Mylvain ]
Salut j'ai un prob avec ce code :DM.TClt.First();repeat Total:=DM.TCltCLT_ID.AsInteger; DM.TClt.Next();until DM.TClt.Eof;FichCltEnrTotLa
Total d'un champ monétaire [ par michelborland ]
Bonjour ;j'ai besoin d'une astuce pour afficher le total d'un champ monétaire au moment ou je suis entraint dee faire entrer mes données ( cas de sais
TQuery [ par nassim_2005 ]
Salut tout le mondeJ'ai 2 tableaux: 1.Achat: Code_Produit / Qte_Achat2.Vente: Code_Produit / Qte_Ventele probleme: j'ai besoin de execute un query de
recuperer une variable et generation code [ par newbieratus ]
8DBonjour a tous,voila j'ai ecrit un petit prog qui doit me recuperer le champs d'une variable et de generer un code en cliquant sur un bouton et en y
requête de selection [ par reysoft ]
Bonjourj'ai une table Tfacture(ref_facture,societe,date_creation,total) et je veux faire plusieur selections 1-la societe Query1.sql.Clear; Query1
Variable base de données dans 2 fenetres [ par braderic ]
Bonjour,je debute (ou plutot redebute) et j'ai le projet de réaliser une BD avec SQLite..Seulement je me pose le probleme des applications avec plusie
Problème de téléchargement de fichier depuis un serveur en FTP [ par phephelavi ]
Bonjour, <p class="MsoNormal" style="MARGIN: 0cm
Accès à la valeur d'une variable par son nom dans une string [ par MAURICIO ]
Bonjour à tous !!!voilà je me présente ... quoi? ce n' est pas un site de rencontre? C' est une site sur la programmation Delphi voire ... Lazarus? Be
Pr ComPort [ par RACHIDMTB1 ]
procedure TForm2.BitBtn4Click(Sender: TObject); //Envoyer VAR STR:STRING; begin COMPORT1.Open; STR:='AT+CU
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|