Accueil > Forum > > > > Pourquoi initialiser une variable locale?
Pourquoi initialiser une variable locale?
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ée 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
Récupérer le résultat d'une requête dans une variable!! [ par anil16 ]
Bonjour, Comment récupérer le résultat d'une requête et le mettre dans une variable[^^confus2] voici ma requête: [code=pas] ADOQuery1.SQL.Clear; ADOQu
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
variable locale et globale [ par Samou85 ]
bonjour à tous! j'ai crée une procedure qui rend comme résultat un tableau dynamique "TableauCc", dans le corps de cette preocedure j'ai mis l'instru
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
Livres en rapport
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|