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

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

なでしこ3の「もし」構文で「もし」の省略ができるようになった

公式の例文を確認

v3.4.26(2024/1/1) 「もし」構文で「もし」の省略について *
「もし…ならば」構文の「もし」を省略できる場合があります。それは『等しい』や『一致』命令を使って条件式を記述する場合です。以下のように記述できます。

A=30
A30等しいならば
  「等しい」表示
違えば
  
「等しくない」表示
ここまで

もしを省略したもし構文・・・いわばifを省略したif文。

さっそく実験してみましょう。 2024/1/17時点のなでしこv3.4.26を使用しています。

・OKなパターン  命令
・ムリなパターン1 変数
・ムリなパターン2 比較演算子
・なぞなパターン でなければ
・アリなパターン 

に分けて紹介します。

OKなパターン 命令

(命令用いた文)ならばと書くパターンでは「もし」を省略できます。

A=30
A30等しいならば1表示 //OK
A30以上ならば1表示 //OK
A50未満ならば1表示 //OK
A偶数ならば1表示  //OK
A10から50範囲内ならば1表示 //OK

「等しい」「以上」「未満」「偶数」「範囲内」は引数を取る命令です。 「もし」がなくても自然に見えますね。

key存在するならば //ローカルストレージ OK
AB辞書キー存在するならば //OK

「存在する」形も見た目よしですね。

A=30
AND (A,2)ならば1表示 //ビット演算 OK
A「3」何文字目ならば1表示 //文字列処理 OK
A「3」出現回数ならば1表示 //文字列処理 OK
A数列判定ならば1表示 //文字種類 OK

関数ならば文法的にはOKとされているので、上記は実行できます。
見た目が美しくないので工夫したいところです。 送り仮名でごまかせるかもしれません。

A「3」何文字目かならば // OK
A数列判定されたならば // OK

ムリなパターン1 変数

(変数)ならばと書くパターンはエラーとなります。(v3.4.26時点)

//例
フラグ
フラグならば1表示 //エラー
それならば1表示  //エラー
そうならば1表示  //エラー

惜しいですね。

ムリなパターン2 比較演算子

比較演算子の式はダメです。(v3.4.26時点) 比較演算子は<、>、=、なんかを使うやつです。

//ダメ
A=30
(A<>10)ならば //エラー
(A==30)ならば //エラー
A30ならば  //エラー

文法エラーとなります(3.4.26時点)
AがBならばの形もエラーとなります。 命令でやりましょう。

余談:なでしこ1では?

なでしこ1では比較演算子でもしを省略するとエラーにならず変な挙動をします。

A30
(A==30)ならば1表示
A表示 //→30

は正常に動作しますが

A30
A==30ならば1表示
A表示 //→なにも表示されない

カッコをはずすとAの中身がnilになります。 こわい!
なでしこ1でもしの省略は使わないほうがいいと思います。

なぞなパターン でなければ

「ならば」の否定形「でなければ」はどうなのかと言うと、

A30
A偶数ならば1表示 //→表示される
A偶数でなければ1表示 //→表示される

「偶数ならば」「偶数でなければ」で両方1が表示されてしまいました。
エラーにならず、結果がおかしいので使わないようにしましょう。(3.4.26時点)

アリなパターン 

関数「ある」「ない」を定義してみます。
※ なでしこv1には「ある」「ない」が命令として登録されているので混同に注意

●(xで|xが|xに)ある。!!(x)を戻す。。。
●(xで|xが|xに)ない。!(x)を戻す。。。
A=30
A「3」何文字目かあるならば1表示
A「3」出現回数あるならば1表示
A要素数あるならば1表示

ある程度は読みやすくなった気がします。

その他

条件式に「配列検索」を使う場合についてはうまい書き方が思いつきませんでした。

●あるを定義した場合でも
そうであるならば1表示はエラーとなりました。残念。