2010-04-23 5 views
1

Voici un morceau de code indiqué et les doutes sont sur l'application des bouclesboucles ada et la mise en œuvre

   C := character'last; --'// SO code colorizer hack 
       I := 1; 
       K : loop 
        Done := C = character'first; --' 
        Count2 := I; 
        Exit K when Done; 
        C := character'pred(c); --' 
        I := I + 1; 
       end loop K; 

Quelqu'un peut-il s'il vous plaît me dire ce que signifie « K » représente for.I deviner son pas une variable Comment "K" contrôle-t-il l'exécution de la boucle?

Répondre

3

K est le nom de la boucle. Les instructions end loop et Exit renvoient à ce nom, pour indiquer clairement quelle boucle doit être quittée. Le Ada Reference Manual l'appelle un "identificateur de boucle_statement".

1

K est une étiquette qui nomme la boucle. Wow, ça fait longtemps que je n'ai vu aucun Ada ...

2

Comme noté, K est l'étiquette de la boucle. Il vous permet d'identifier une boucle particulière pour faciliter la lisibilité, et également de sortir sélectivement une boucle spécifique d'un ensemble de liens englobants imbriqués (ie un "goto" ... shhh! :-)

Voici un exemple inventé (non compilé):

S : Unbounded_String; 
    F : File_Type; 
    Done_With_Line : Boolean := False; 
    All_Done  : Boolean := False; 
begin 
    Open(F, In_File, "data_file.dat"); 
    File_Processor: 
    while not End_Of_File(F) loop 
     S := Get_Line(F); 
     Data_Processor: 
     for I in 1 .. Length(S) loop 
      Process_A_Character 
       (Data_Char => Element(S, I), -- Mode in 
       Line_Done => Done_With_Line, -- Mode out 
       Finished => All_Done);  -- Mode out 

      -- If completely done, leave the outermost (file processing) loop 
      exit File_Processor when All_Done; 

      -- If just done with this line of data, go on to the next one. 
      exit Data_Processor when Done_With_Line; 
     end loop; 
    end loop File_Processor; 
    Close(F); 
end; 
+1

Bah. N'effrayez pas les débutants avec le "g-word" redouté. 'exit' n'est pas plus un goto que' if', 'loop' et' case' le sont. –

2

K est essentiellement le nom de la boucle. Le exit k indique au code d'arrêter la boucle et de passer à l'instruction suivante après la fin de la boucle k.

Vous n'avez généralement pas besoin de nommer les boucles, car vous pouvez simplement dire exit et quitter la boucle d'inclusion. Cependant, si vous avez une boucle imbriquée dans une autre boucle, et que vous ne voulez pas sortir immédiatement de l'instruction de sortie, mais de la plus éloignée, il peut être nécessaire de faire quelque chose comme ça.