なでしこを明後日の方向に

日本語プログラム言語なでしこを応援しています

なでしこの「無限ループの書きだし」を考える

今回は(も?)あまり役に立たないことを考えます。
具体的には「無限ループの書きだし」を考察します。

1ループ //←ここ
  回数表示
  もし回数>=3ならば抜ける

いつも手癖で「1でループ」と書いていますが、なぜこう書いているんだろうかと疑問に思いました。
どこかで例を見たのか、自分で決めつけたか……

「1でループ」じゃなくてもうすこし一般的な日本語に近くなりませんかね?

「ループ」「間」どちらを使うか

「ループ」と「間」は同じ命令です。
 (条件)
 (条件)ループ
で記述し、(条件)のところにループ条件を入れます。
今回は無限ループなので条件には「真になるもの」が入ります。

サンプルやネットで無限にループする例を見てみます。
結果は……

 オンの間  真の間  1の間

「1で」どころか「ループ」じゃなくて「間」が一般的……?
「ループ」のリファレンスも確認。

『(条件式)のループ...』で条件式が真の時...の文を繰り返し実行する。
説明 『~の間~』と同じ意味です。

結論:「ループ」よりも「間」が優勢。 ループは少数派!

検索性を考える

「ループ」…「グループ」が大量にひっかかる(グループコピーなど)
「間」 …「時間」と「部品間隔」がひっかかる(システム時間など)

どっちもどっちか?

条件の部分を考える

『(条件)の間~』の条件部分は(真)相当になるものをいれて無限ループとします。
なでしこの(真)に相当する定数をあてはめてみましょう。

 はいの間  必要の間  オンの間  真の間
 成功の間  OKの間  1の間

どれも一般的な日本語に近い感じがない……
「必要の間」はすこしいい雰囲気を出している気はします。

結論:保留

「1でループ」の「で」ってなんだ?

リファレンスをみて気づいたのが「で」の扱いです。
「で」は助詞です。

たとえば表示の場合は「を」「と」が助詞として使用できます。

【名前】表示 (ひょうじ)
【引数】{=?}Sを|Sと
【説明】画面に文字列Sを表示する

『(条件)の間』『(条件)のループ』という説明しかないのに「1でループ」は動いているのです。
『(条件)(助詞)間』『(条件)(助詞)ループ』の形をとればなんでもいけるのでは?
助詞とされているものを手あたり次第試してみました。

結構多くのものが通りました。
「1はループ」「1とはループ」は通りませんでした。

[成立するもの]
 1からループ  1までループ  1までをループ
 1までのループ  1でループ  1をループ
 1のループ  1がループ  1にループ  1へループ
 1とループ  1してループ  1だけループ
 1くらいループ  1なのかループ  1としてループ
 1よりループ  1ほどループ  1などループ
 1ってループ  1ではループ  1てループ

番外編で、「1,ループ」は成立しました。

結論:助詞は比較的自由!

再び条件の部分を考える

『(条件)(助詞)間』『(条件)(助詞)ループ』の条件をもう一度。
なでしこは0以外の数値もしくは0文字でない文字列が真ですから、大きな数や長い文字列はTRUEとなります。


 πの間  // ぱいのあいだ
 赤色の間 // セキショク ノ マ

↑ πや色定数は数値なので無限ループを形成できます。(黒色以外)
意味不明度が増すだけなのでやめましょう。


 無限にループ //!変数宣言が必要だと使えない
 ずっとループ //!変数宣言が必要だと使えない

↑未定義の変数名「無限」「ずっ」が2文字なので無限ループになります。
!変数宣言が必要 になっているとエラーが出るので不便です。


 成功するまでループ

↑パスワードなどの入力を繰り返し聞くときには有能そうです。
逆にループの中身が「失敗するまで繰り返す」だと意味不明になります。


 今年の間     //【名前】今年 (ことし)  【説明】今年が何年かを返す。
 来年までループ  //【名前】来年 (らいねん) 【説明】来年が何年かを西暦で返す。

↑「今年」「来年」は関数です。西暦を値で返すので真になるでしょう。
ちなみに年をまたいでも止まりません。微妙にわかりにくい。


 「永遠」にループ  //文字列は0文字でなければ真

↑文字列を条件に使うのは自由度が高そうです。
意図が伝わりにくいでしょうか。もう一息!


 「抜ける」までループ
 「戻る」までループ

↑……読みやすいかもしれない!
すこしプログラムに慣れた人は混乱するかも。


「抜ける」までループ
  回数表示
  もし回数>=3ならば抜ける

やりきった感がありますが、たぶんまた「1でループ」って書くと思う。