はじめてのDelphi(その4−2)

戻る

ここでは、VBC++BuilderDelphiのループ文の違いを見てみます。ループ文は言語により同じような記述ができないので注意が必要です。

ループ文

  • Do While(VB)、while(C++Builder)、while dorepeat until(Delphi)文の例です。

 


VBの場合

  • continue がないので、if 文を使用しています。(Ex.4)
  • Do Untilは使用していません。(Do Whileで代用可能/比較がややこしくなるので(^^;)

先頭へ


Private Sub Command1_Click()
    Dim iloop As Integer
    Dim icount As Integer
    Dim msg As String
    
    '* 他言語との比較のため、Do..Untilの記述は使用していない。
    
    ' Ex.1:Do
    ' 条件(iloop <10)が真のあいだループする例
    ' (条件に応じて0回以上ループする)
    iloop = 0
    icount = 0
    msg = ""
    Do While iloop <10
        msg = msg + Str(iloop) + ","
        iloop = iloop + 1
        icount = icount + 1
    Loop
    msg = msg + vbCrLf + Str(icount) + "回do whileループしました"
    Call MsgBox(msg)
    
    ' Ex.2:Do
    ' 条件(iloop <10)が真のあいだループする例
    ' (条件に応じて1回以上ループする)
    iloop = 0
    icount = 0
    msg = ""
    Do
        msg = msg + Str(iloop) + ","
        iloop = iloop + 1
        icount = icount + 1
    Loop While iloop <10
    msg = msg + vbCrLf + Str(icount) + "回do whileループしました"
    Call MsgBox(msg)
    
    ' Ex.3:Do
    ' ループ途中からの脱出
    iloop = 0
    icount = 0
    msg = ""
    Do While iloop <10
        If iloop = 5 Then
            Exit Do     ' ループ脱出
        End If
        msg = msg + Str(iloop) + ","
        iloop = iloop + 1
        icount = icount + 1
    Loop
    msg = msg + vbCrLf + Str(icount) + "回do whileループしました"
    Call MsgBox(msg)
    
    ' Ex.4:Do
    ' カウントアップ中にループ先頭に戻る例
    '
    ' VBはC/C++やPascalのようにループ先頭への記述はできない
    ' そのためロジックで対応します
    iloop = 0
    icount = 0
    msg = ""
    Do While iloop <10
        If (iloop Mod 2) <> 1 Then
            msg = msg + Str(iloop) + ","
            icount = icount + 1
        End If
        iloop = iloop + 1
    Loop
    msg = msg + vbCrLf + Str(icount) + "回do whileループしました"
    Call MsgBox(msg)
    
End Sub


C++Builderの場合

先頭へ


//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int iloop;
  int icount;
  AnsiString msg;

  // Ex.1:while
  // 条件(iloop <10)が真のあいだループする例
  iloop = icount = 0;
  msg = "";
  while( iloop <10 ){
    msg = msg + IntToStr( iloop ) + ", ";
    iloop ++;
    icount ++;
  }
  msg = msg + "\n" + IntToStr( icount ) + " 回whileループしました";
  ShowMessage( msg );

  // Ex.2:do..while
  // 条件(iloop <10)が真のあいだループする例
  iloop = icount = 0;
  msg = "";
  do {
    msg = msg + IntToStr( iloop ) + ", ";
    iloop ++;
    icount ++;
  } while( iloop <10 );
  msg = msg + "\n" + IntToStr( icount ) + " 回do whileループしました";
  ShowMessage( msg );

  // Ex.3:while
  // ループ途中からの脱出
  iloop = icount = 0;
  msg = "";
  while( iloop <10 ){
    if( iloop == 5 ){
      break;  // ループ脱出
    }
    msg = msg + IntToStr( iloop ) + ", ";
    iloop ++;
    icount ++;
  }
  msg = msg + "\n" + IntToStr( icount ) + " 回whileループしました";
  ShowMessage( msg );

  // Ex.4:while
  // ループ先頭に戻る例
  iloop = icount = 0;
  msg = "";
  while( iloop <10 ){
    if( ( iloop % 2 ) == 1 ){
      iloop ++;  // 無限ループを防ぐため
      continue;  // ループ先頭へ
    }
    msg = msg + IntToStr( iloop ) + ", ";
    iloop ++;
    icount ++;
  }
  msg = msg + "\n" + IntToStr( icount ) + " 回whileループしました";
  ShowMessage( msg );

}
//---------------------------------------------------------------------------


Delphiの場合

  • while do はループの終わりで条件判断できないので、repeat until を使用しています。(Ex.2)

先頭へ


procedure TForm1.Button1Click(Sender: TObject);
var
  iloop: Integer;
  icount: Integer;
  msg: AnsiString;
begin
  // Ex.1:while
  // 条件(iloop <10)が真のあいだループする例
  // (条件に応じて0回以上ループする)
  iloop := 0;
  icount := 0;
  msg := '';
  while iloop <10 do
  begin
    msg := msg + IntToStr( iloop ) + ', ';
    Inc( iloop );
    Inc( icount );
  end;
  msg := msg + #13#10 + IntToStr( icount ) + '回whileループしました';
  ShowMessage( msg );

  // Ex.2:repeat
  // 条件(iloop <10)が真のあいだループする例
  //
  // repeat ..untilでは、条件(iloop >= 10)が偽のあいだループ
  // と記述している。
  // (条件に応じて1回以上ループする)
  iloop := 0;
  icount := 0;
  msg := '';
  repeat
    msg := msg + IntToStr( iloop ) + ', ';
    Inc( iloop );
    Inc( icount );
  until iloop >= 10;
  msg := msg + #13#10 + IntToStr( icount ) + '回repeatループしました';
  ShowMessage( msg );

  // Ex.3:while
  // ループ途中からの脱出
  iloop := 0;
  icount := 0;
  msg := '';
  while iloop <10 do
  begin
    if iloop = 5 then
    begin
      Break; // ループ脱出
    end;
    msg := msg + IntToStr( iloop ) + ', ';
    Inc( iloop );
    Inc( icount );
  end;
  msg := msg + #13#10 + IntToStr( icount ) + '回whileループしました';
  ShowMessage( msg );

  // Ex.4:while
  // ループ先頭に戻る例
  iloop := 0;
  icount := 0;
  msg := '';
  while iloop <10 do
  begin
    if ( iloop mod 2 ) = 1 then
    begin
      Inc( iloop ); // 無限ループを防ぐため
      Continue; // ループ先頭へ
    end;
    msg := msg + IntToStr( iloop ) + ', ';
    Inc( iloop );
    Inc( icount );
  end;
  msg := msg + #13#10 + IntToStr( icount ) + '回whileループしました';
  ShowMessage( msg );

end;


 

先頭へ/戻る