「なでしこ」バグ&要望掲示板

なでしこのバグや実現して欲しい機能の要望を行う掲示板です。
[一覧へ] > (@856) [低] [未処理]
@856■ (#2714) 「もし」がない「ならば」がエラーにならない - とけい (2016-12-12 03:59) /高 未処理
【症状】
 「もし」がない「ならば」がエラーにならない
【再現方法】
S = 10
S == 8 ならば
 Sを表示  //←表示される

【要望】
 エラーにしてほしい
 もしくは「もし」を付けた時の動作にしてほしい
【バージョン】
 1.562
【その他】
 変な挙動をする理由を見つけるのにえらく時間を使いました。
 犠牲者が増えるまえになんとかしていただきたいです。


(#2715) 括弧をつければ動作します - こころ (2016-12-23 22:59) /高 未処理
S=10
(S=8)ならば
 Sを表示

とすれば正しく動作します。
普段から条件式に括弧をつけることをオススメします。

(#2716) 回避策には頼れない - とけい (2016-12-15 01:33) /高 未処理
初めて知りました……裏技か
書き方で回避できるとはいっても、

S = 10
S == 8ならば
 Sを表示

やっぱりこれが通られると、困る。
基本的な条件分岐である「もし~ならば」は初心者もよく使うでしょうし。
「ならば」も予約語の一員としてがんばってほしいです。

(#2718) 条件式に括弧を付けないのは正しくないプログラムです - こころ (2016-12-24 09:54) /低 未処理
裏技ではなく、条件式に括弧をつけないのは正しくない書き方です。他の言語と混同していません?

リファレンス
http://nadesi.com/man/index.php?%E3%81%AA%E3%82%89%E3%81%B0

及びサンプルプログラムや簡易解説では括弧を付けていることが確認できます。


http://nadesi.com/cgi/bug/attach/2718-Screenshot_1.png



(#2720) 括弧なしが通常のはず - とけい (2016-12-24 09:47) /高 未処理
(真の処理)や(偽の処理)の部分には普通カッコをつけないのだから、
(条件式)の部分はカッコが必要という意味ではないはずです。

プログラミング基礎編
http://nadesi.com/doc/kouza/04-1-if.htm

利用例に
 もし、年齢>20ならば
ってありますし、基本はカッコなしのはず。
なでしこの理念的にもきっとカッコなしのはず。

「ならば」だけでも動く事と、上手く動かすには現状カッコが必要な事はわかりました。
じゃあうっかり抜いた場合どういう動作をするか?って部分が問題だと思います。

括弧をつけない場合の動作を保証しないとしても、
//------------------------
S=10
S==8ならば
 //なにもなし
Sを言う
//------------------------
これを実行するとSの中身がnilになっているんだから、それはもうビックリしますよ。

(#2721) Re: 括弧なしが通常のはず - うぇいく (2016-12-24 12:02) /低 未処理
細かい部分について、マニュアルに記載があるから正とも限らないと思っています(それほど細かく精査されていない)そのうえで、こう思っています。

()が無くても動くのは動きますが、基本的に、日本語で書く場合を想定しているのだと思います。
もし、かっこ必須としてしまうと、
「もしAが6以上ならば、」
という文を()が必要としてしまうと、
「もし(Aが6以上)ならば、」
となり、不自然です。
日本語の命令で記述する限り、たぶん、かっこは無くても大丈夫です。

比較演算子による数式を使う場合は、常に()を付けることをお勧めします。
(強制してしまうと、日本語で書いた場合も必要となってしまうので、実装上での強制は難しいです)

日本語で書く場合、数式で書く場合それぞれの注意点は、
・数式は優先順位により計算される順序が明確。日本語では制御できない。
・数式の場合、適時()が必要。基本的に、全体も()で一つの式であることを明示する必要がある(とくに、「の間」のように比較式から始まる命令の時、「=」があると、()が必須になったりするので常に必要と思っていた方が確実です。)

「もし」の無い「ならば」がどう処理されているのかは、調べてみます。
(基本的に、「=」を含む行は、代入文として扱われます。Sに「=8ならば」を代入しようとして、変に失敗しているのだと思います。)

(#2714)へ返信する:

名前
タイトル
本文
優先度
状態
確認キー お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。
編集キー 編集時に使うキーを入力(省略可能)
添付ファイル 画像ファイル(最大300KB)を添付可能