Alternativa ciondolante

Considera attentamente i due diagrammi di flusso e le codifiche corrispondenti

ifcio1
If A > 0 Then
   Begin
      If B > 0 Then
         Begin
            Istr11;
            Istr12;
         End
      Else
         Begin
            Istr21;
            Istr22;
         End;
   End;
ifcio2
If A > 0 Then
   Begin
      If B > 0 Then
         Begin
            Istr11;
            Istr12;
         End
   End
Else
   Begin
      Istr21;
      Istr22;
   End;

Un programmatore inesperto potrebbe produrre, per il secondo diagramma di flusso, il codice seguente

If A > 0 Then
   If B > 0 Then
      Begin
         Istr11;
         Istr12;
      End
Else             { ... ERRORE! ... }
   Begin
      Istr21;
      Istr22;
   End;

Purtroppo il compilatore lo interpreterà come corrispondente al primo diagramma…

  • il compilatore non prende in considerazione l’indentazione ma associa correttamente l’Else all’ultimo If rimasto aperto
  • il ramo Else si sposta da sinistra verso destra, ciondola
  • l’uso delle etichette di apertura e chiusura dei blocchi risolve l’ambiguità.

Il programmatore alle prime armi dovrebbe utilizzare sempre le etichette di inizio e fine blocco, anche nel caso di istruzioni singole, per evitare di incorrere nell’errore dell’else ciondolante.