do ... break ... whileを使用して、マルチレベルの条件付き判断の構造を単純化します。
あなたがたくさんのコードを書いたなら、あなたは間違いなく時々同様の状況に遭遇するでしょう:
ファイルAを見つけ、ファイルをBとしてコピーし、Bファイルを開いて、コンテンツをBファイルに書き込むとします。最後に、書き込みが成功した後、いくつかの関連操作を実行する必要があります。
このプロセス中に、次の状況が発生すると、後続の操作は中止され、操作は失敗と見なされます。
1.Aファイルが存在しない場合。
2. Bファイルがすでに存在し、ユーザーがそれを上書きするかどうかを尋ねられた場合、ユーザーは「いいえ」と答えます。
3.ファイルBはコピーできません。
4.ファイルBを開くことができません。
5.Bファイルを書き込めません。
6.ファイルBを正常に閉じることができません。
プログラムを次のように擬似コードで記述します。
if( A文件存在 )
{
执行A文件的相关操作;
if( B文件不存在 || 用户允许覆盖原有B文件)
{
复制A文件为B文件;
if(复制文件成功)
{
打开B文件;
if(打开文件成功)
{
写入文件;
if(写入成功)
{
关闭B文件;
if(关闭成成功)
{
执行其它必须在一切成功后进行的操作。
……
}
}
}
}
}
}
一部の操作と判断を同時に処理できる可能性もありますが、それでもこの手順の煩わしさは避けられず、実際の手順の複雑さはこの例よりもはるかに大きいことがよくあります。文法的な観点から、この例にはエラーはありませんが、その階層化された条件付き判断により、書き込み、読み取り、およびデバッグが困難になります。複雑な状況では、人的エラー(最もずさんな、中かっこなど)が発生しやすくなります。中括弧)。一致は等しくありません...)。
同じコード「programveteran」は次のように書かれています。
do
{
if(A文件不存在)
break;
执行A文件的相关操作;
if(B文件存在 && 用户不允许覆盖)
break;
复制A文件为B文件;
if(复制不成功)
break;
打开B文件;
if(打开B文件不成功)
break;
写入文件;
if(写入文件不成功)
break;
关闭B文件;
if(关闭不成功)
break;
执行其它必须在一切成功后进行的操作。
……
}
while(false);
ほら、コードは「ストレート」なのですか?
ここではDo..whileが使用されていますが、ループ用ではなく、break関数を使用するためのものです。
操作が失敗した場合は、ループから直接抜け出します。したがって、ループ条件は常に「永久に偽」の偽です。