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)

samedi 1 décembre 2007 à 01:13:25 | Pourquoi initialiser une variable locale?

khawarizm

Membre Club

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

Membre Club
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

Membre Club

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

Membre Club
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

Membre Club Administrateur CodeS-SourceS
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?

khawarizm

Membre Club

Bonjour tout le monde ;

justement le faite que j'ai toujours affecter quelque chose à mes variables j'ai jamais fait attention ; quoi que parfois j'ai eu des problèmes de calcules mais j'ai jamais fait le lien , tellement la chose était évidente pour moi , à force de vouloir évoluer vite voilà que je laisse des plumes . En tous cas j'ai appris ma leçon et j'espère que tout les débutants comme moi tirent une conclusion de ça . Merci infiniment  les gars, heureusement que vous ete  là , vous^ete  une vrais chance pour nous .


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

Membre Club

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

Membre Club
@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


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,343 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.