アカウント名:
パスワード:
ライティングソリッドコード [amazon.co.jp](カタカナだと何がなんやら。必殺技か?)に書いてあったと記憶してますが、if (1==n) {} で解決。
両辺が変数の場合だけ気をつければ良いので、習得すると if のストレスが減る。
むしろ両辺が変数の場合にしくじったら、(頭のなかでミスの条件からはずしているので)見つけづらくなる。
読みづらくなるデメリットに比べて、メリットが少なすぎるかと。いまどきのコンパイラなら警告出してくれるだろうから、警告のレベルを素直に上げたほうがよっぽどいいと思うけどなぁ。
> むしろ両辺が変数の場合にしくじったら、(頭のなかでミスの条件からはずしているので)見つけづらくなる。
なぜ頭の中で条件から外す?両辺が変数の場合はまず疑いましょう。
> 読みづらくなるデメリットに比べて、メリットが少なすぎるかと。
読みづらいのは慣れの問題ではありませんか?逆に言うと慣れればメリットしかない。
ちなみにコンパイルという工程が存在しない言語(PHP とか)では、右辺定数はかなり重要。C 以外でも利用できるから、慣らしておいた方が良い。
もちろん Lint も使いつつ、コンパイラの警告は最大限に利用してその上で右辺に定数を置く。
プログラマが想定してない動きをさせない努力は、慣れ不慣れとかいう理由で怠ってはいけない。
「ifの条件式で==を=に間違えることはない。バグを追っかけてるときにifの条件式中に=が現れていないことを確認する必要は全くない」。これが頭の中で条件から外した状態。
「ifの条件式で==を=に間違えることはない、ただし、==の両側が変数のときをのぞく。バグを追っかけてるときにifの条件式中に=が現れていないことを確認する必要がある、ただし、一方がr-valueだったら気にしなくてよい」。これは、気苦労が増えるだけ。
「ifの条件式で==を=に間違える可能性がある。バグを追っかけてるときにifの条件式中に=が現れていないことを確認すべし」。これが、よっぽど気楽。
lintなりのパーサを利用できない環境だったらどうするの?
参考までに、なんでその結論に落ち着けることに成功したのか、その過程を教えてくれ、兄貴。
# サル知恵を付けて屁理屈を捏ねる輩をどう扱えばいいか困っていて、本当に参考にしたいAC
WRITING SOLID CODEが手元にあったので探してみたよ。↓このへん?------------------バグを捕まえるのに必要な、プログラマとしてのスキルは低減されなければならない。コンパイラやlintの警告オプションは、バグを捕まえるためにプログラマのどんなスキルも必要としない。~中略~このようにしておくと、"=="の代わりに"="をタイプすればコンパイラは誤りを指摘するだろう。なぜなら、定数に何かを代入することはできないからだ。この解決方法にどれぐらいの効果があるだろうか?なぜこのアプローチは、コンパイラのオプションを指定する場合と比べて自動的ではないのだろうか?-----------------警告オプションで見つけられるなら、無理するなってことでいいのかな?警告でないなら、コンパイラのベンダに警告が出るようにお願いしろとまで書いてあるなw
Appendix C 解答から引用
定数や式を比較式の左辺に置くのは有効である。なぜなら、それによって自動的にバグを検出する方法が追加されるからだ。だが残念なことに、この方法はどちらかのオペランドが定数か式でなければ使えない。両方とも変数だったら、このテクニックは無意味になってしまう。この方法のもう一つの問題点は、プログラマがこのテクニックを学び、コードを書くときに忘れずに使うようにしなかればならないことだ。一方でコンパイラのオプションを使う場合、コンパイラはあらゆる代入バグを警告してくれるだろう。さらによいことに、コンパイラオプションは比較式の両辺のオペランドを入れ替わることの利点を教わっていないCS 101(コンピュータ科学科の初等授業)を受けたばかりのプログラマに対しても有効である。もしコンパイラオプションがあるなら、それを使うべきである。なかったら、もっと役に立つコンパイラが手に入るまで、比較式の中では定数や式は左辺に置くようにすべきだ。
ただ、古い(役立たない)コンパイラの場合はLintで検出できるなら、#1845662さんの言うようにLintを使うに一票。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
コンピュータは旧約聖書の神に似ている、規則は多く、慈悲は無い -- Joseph Campbell
あれ! if ( n = 1 ) { じゃないの? (スコア:1)
気が付かないで代入する件だとばっかり思っていました。
Re:あれ! if ( n = 1 ) { じゃないの? (スコア:1)
ライティングソリッドコード [amazon.co.jp](カタカナだと何がなんやら。必殺技か?)に書いてあったと記憶してますが、
if (1==n) {} で解決。
両辺が変数の場合だけ気をつければ良いので、習得すると if のストレスが減る。
Re: (スコア:0)
むしろ両辺が変数の場合にしくじったら、(頭のなかでミスの条件からはずしているので)見つけづらくなる。
読みづらくなるデメリットに比べて、メリットが少なすぎるかと。
いまどきのコンパイラなら警告出してくれるだろうから、警告のレベルを素直に上げたほうがよっぽどいいと思うけどなぁ。
Re:あれ! if ( n = 1 ) { じゃないの? (スコア:1)
> むしろ両辺が変数の場合にしくじったら、(頭のなかでミスの条件からはずしているので)見つけづらくなる。
なぜ頭の中で条件から外す?
両辺が変数の場合はまず疑いましょう。
> 読みづらくなるデメリットに比べて、メリットが少なすぎるかと。
読みづらいのは慣れの問題ではありませんか?
逆に言うと慣れればメリットしかない。
ちなみにコンパイルという工程が存在しない言語(PHP とか)では、
右辺定数はかなり重要。
C 以外でも利用できるから、慣らしておいた方が良い。
もちろん Lint も使いつつ、コンパイラの警告は最大限に利用して
その上で右辺に定数を置く。
プログラマが想定してない動きをさせない努力は、
慣れ不慣れとかいう理由で怠ってはいけない。
Re: (スコア:0)
「ifの条件式で==を=に間違えることはない。バグを追っかけてるときにifの条件式中に=が現れていないことを確認する必要は全くない」。これが頭の中で条件から外した状態。
「ifの条件式で==を=に間違えることはない、ただし、==の両側が変数のときをのぞく。バグを追っかけてるときにifの条件式中に=が現れていないことを確認する必要がある、ただし、一方がr-valueだったら気にしなくてよい」。これは、気苦労が増えるだけ。
「ifの条件式で==を=に間違える可能性がある。バグを追っかけてるときにifの条件式中に=が現れていないことを確認すべし」。これが、よっぽど気楽。
Re: (スコア:0)
lintなりのパーサを利用できない環境だったらどうするの?
Re: (スコア:0)
15年も前に。
シュキーボード (スコア:2, おもしろおかしい)
= キーに連射装置をつけるのが正解
Re: (スコア:0)
参考までに、なんでその結論に落ち着けることに成功したのか、その過程を教えてくれ、兄貴。
# サル知恵を付けて屁理屈を捏ねる輩をどう扱えばいいか困っていて、本当に参考にしたいAC
Re: (スコア:0)
WRITING SOLID CODEが手元にあったので探してみたよ。
↓このへん?
------------------
バグを捕まえるのに必要な、プログラマとしてのスキルは低減されなければならない。
コンパイラやlintの警告オプションは、バグを捕まえるためにプログラマのどんなスキルも必要としない。
~中略~
このようにしておくと、"=="の代わりに"="をタイプすればコンパイラは誤りを指摘するだろう。
なぜなら、定数に何かを代入することはできないからだ。
この解決方法にどれぐらいの効果があるだろうか?
なぜこのアプローチは、コンパイラのオプションを指定する場合と比べて自動的ではないのだろうか?
-----------------
警告オプションで見つけられるなら、無理するなってことでいいのかな?
警告でないなら、コンパイラのベンダに警告が出るようにお願いしろとまで書いてあるなw
Re:あれ! if ( n = 1 ) { じゃないの? (スコア:1, 参考になる)
Appendix C 解答から引用
ただ、古い(役立たない)コンパイラの場合はLintで検出できるなら、#1845662さんの言うようにLintを使うに一票。