公式の例文を確認
v3.4.26(2024/1/1) 「もし」構文で「もし」の省略について *
「もし…ならば」構文の「もし」を省略できる場合があります。それは『等しい』や『一致』命令を使って条件式を記述する場合です。以下のように記述できます。
A=30
Aが30と等しいならば
「等しい」と表示。
違えば
「等しくない」と表示。
ここまで。
もしを省略したもし構文・・・いわばifを省略したif文。
さっそく実験してみましょう。 2024/1/17時点のなでしこv3.4.26を使用しています。
・OKなパターン 命令
・ムリなパターン1 変数
・ムリなパターン2 比較演算子
・なぞなパターン でなければ
・アリなパターン
に分けて紹介します。
OKなパターン 命令
(命令を用いた文)ならば
と書くパターンでは「もし」を省略できます。
A=30
Aが30と等しいならば、1を表示 //OK
Aが30以上ならば、1を表示 //OK
Aが50未満ならば、1を表示 //OK
Aが偶数ならば、1を表示 //OK
Aが10から50の範囲内ならば、1を表示 //OK
「等しい」「以上」「未満」「偶数」「範囲内」は引数を取る命令です。 「もし」がなくても自然に見えますね。
keyが存在するならば //ローカルストレージ OK
AにBが辞書キー存在するならば //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)ならば //エラー
Aが30ならば //エラー
文法エラーとなります(3.4.26時点)
AがBならばの形もエラーとなります。
命令でやりましょう。
余談:なでしこ1では?
なでしこ1では比較演算子でもしを省略するとエラーにならず変な挙動をします。
Aは30
(A==30)ならば、1を表示
Aを表示 //→30
は正常に動作しますが
Aは30
A==30ならば、1を表示
Aを表示 //→なにも表示されない
カッコをはずすとAの中身がnilになります。 こわい!
なでしこ1でもしの省略は使わないほうがいいと思います。
なぞなパターン でなければ
「ならば」の否定形「でなければ」はどうなのかと言うと、
Aは30
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を表示
はエラーとなりました。残念。