アカウント名:
パスワード:
自称17歳としては敢えて規制を受けるべきか!?
最近のコンパイラだとワーニング出そうなw(JavaやC#だと型エラーだし。)
> 最近のコンパイラだとワーニング出そうなw
昔、こう書けと指導されたことがあります。
誤 if(age == 17) 正 if(17 == age)
最近、この手のご指導を聞かないのは、コンパイラが警告出してくれるようになっていちいち気にする必要がなくなったからなのか。
#それでも今だ手癖で定数を左にもってきちゃいます。
そのスタイルは、比較の片方が定数の時にしか使えないという限定的なものであり、限定的でありながら、可読性(意味理解)に難がある、というのが否定派の意見でしょうか。どうせなら、if(0==age-17)みたいに、「等しいかどうかの判定は、差が0かどうか調べる」ってスタイルなら、一貫性がとれてていいかなーと思うのですが、そういうスタイルを使ってる人は見たことないですね…
確かに効果は限定的な割に可読性に難があることは否めない。そのことは使っていて痛感してます。
人の書いたコードは、何これ?とちょっとでも思っちゃうと読解する気力が失せちゃうというか。可読性を損なうトラップというのはできるだけ避けるべきですね。
あと、#1503073 のACさんが指摘していますが、> コード上でトリッキーなことをやって安全性を高めるのではなく、外部のコード検査ツール等を使って安全性を高めるべきです。というのも納得。
永遠に17歳じゃないだろw
マヂレスするとコレ、実装バグだけじゃなく発想バグも内在してるところが面白いね。
いわゆる年齢チェックを、不等号(=とか)じゃなく等号でやろうとするところで既におかしい。ここが発想バグ。
そしてそこに、プログラマなら言うまでもないあの有名バグが実装時に絡まってきている。
#ひさしくJavaやらされてると、Cのあの振る舞いが懐かしく思い出されるのでAC
とりあえず、数字を前に書くスタイルを守っていれば気づくバグだけど・・・。
void checkAge(int age){ if(17 = age) printf("私は17歳です。\n"); else printf("私は17歳ではありません。\n");}
と思いました。
こやつが偉大な釣り氏なのか周りが気づかないのか非常に興味深いな。サブジェクトの「ほぼ」の捉え方次第か?
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
ナニゲにアレゲなのは、ナニゲなアレゲ -- アレゲ研究家
18歳 (スコア:3, おもしろおかしい)
17歳教 (スコア:2, おもしろおかしい)
自称17歳としては敢えて規制を受けるべきか!?
ほぼ永遠の17歳 (スコア:4, おもしろおかしい)
if(age = 17)
printf("私は17歳です。\n");
else
printf("私は17歳ではありません。\n");
}
Re:ほぼ永遠の17歳 (スコア:1)
最近のコンパイラだとワーニング出そうなw
(JavaやC#だと型エラーだし。)
Re:ほぼ永遠の17歳 (スコア:1)
> 最近のコンパイラだとワーニング出そうなw
昔、こう書けと指導されたことがあります。
誤 if(age == 17)
正 if(17 == age)
最近、この手のご指導を聞かないのは、
コンパイラが警告出してくれるようになって
いちいち気にする必要がなくなったからなのか。
#それでも今だ手癖で定数を左にもってきちゃいます。
格差社会ニッポンを変える!
貸し渋り・はがしの温床、大銀行の厳正審査をやめさせよう!
Re:ほぼ永遠の17歳 (スコア:1)
そのスタイルは、比較の片方が定数の時にしか使えないという限定的なものであり、
限定的でありながら、可読性(意味理解)に難がある、というのが否定派の意見でしょうか。
どうせなら、
if(0==age-17)
みたいに、「等しいかどうかの判定は、差が0かどうか調べる」ってスタイルなら、一貫性がとれてていいかなーと思うのですが、そういうスタイルを使ってる人は見たことないですね…
Re:ほぼ永遠の17歳 (スコア:1)
確かに効果は限定的な割に可読性に難があることは否めない。そのことは使っていて痛感してます。
人の書いたコードは、何これ?とちょっとでも思っちゃうと読解する気力が失せちゃうというか。可読性を損なうトラップというのはできるだけ避けるべきですね。
あと、#1503073 のACさんが指摘していますが、
> コード上でトリッキーなことをやって安全性を高めるのではなく、外部のコード検査ツール等を使って安全性を高めるべきです。
というのも納得。
格差社会ニッポンを変える!
貸し渋り・はがしの温床、大銀行の厳正審査をやめさせよう!
Re: (スコア:0)
定数を左辺に書いて、頻繁にコンパイルエラーを食らっているような人は、変数どうしの比較でも同じ失敗をしますが、そこではコンパイルエラーを食らいません。これが問題です。
次に、直感的ではない、ということです。プログラムはなるべく思考通りの順序で書くべきです。
コード上でトリッキーなことをやって安全性を高めるのではなく、外部のコード検査ツール等を使って安全性を高めるべきです。
Re:ほぼ永遠の17歳 (スコア:1)
永遠に17歳じゃないだろw
Re: (スコア:0)
Re:ほぼ永遠の17歳 (スコア:1)
一度コンパイルして実行してみたら気づくと思うけど。
# 油断してるとやらかすんだよな。これ。
Re: (スコア:0)
Re: (スコア:0)
マヂレスするとコレ、実装バグだけじゃなく発想バグも内在してるところが面白いね。
いわゆる年齢チェックを、不等号(=とか)じゃなく等号でやろうとするところで既におかしい。
ここが発想バグ。
そしてそこに、プログラマなら言うまでもないあの有名バグが実装時に絡まってきている。
#ひさしくJavaやらされてると、Cのあの振る舞いが懐かしく思い出されるのでAC
Re: (スコア:0)
「17歳であるか否か」を判定したかったのだとおもいます。
私の思うところでは、この処理を明確に表す関数名に直してほしいです。
以下のような候補でお願いします。
checkAveEqual17
checkSevenTeen
cehckEternalIdol
Re: (スコア:0)
}
こうするとさらに幸せに。
Re: (スコア:0)
とりあえず、数字を前に書くスタイルを守っていれば気づくバグだけど・・・。
void checkAge(int age){
if(17 = age)
printf("私は17歳です。\n");
else
printf("私は17歳ではありません。\n");
}
と思いました。
Re: (スコア:0)
Re: (スコア:0)
Re: (スコア:0)
こやつが偉大な釣り氏なのか
周りが気づかないのか非常に興味深いな。
サブジェクトの「ほぼ」の捉え方次第か?
Re: (スコア:0)
最近はVB書いた後だとやってしまうようになってしまった・・・
Re: (スコア:0)
Re:18歳 (スコア:1)
青少年携帯電話フィルタリングを始めたら、2008年下期から日本の少年による強姦犯が急増したように見えます。
http://like700.hp.infoseek.co.jp/42.html#Rape-toukei [infoseek.co.jp]
Re: (スコア:0)
Re: (スコア:0)