アカウント名:
パスワード:
きっかけはこのおもしろい(オブラートに包んだ表現)ツイートではないかな
https://twitter.com/fnya/status/1192036095820615680 [twitter.com]
return (条件)? true : false; なんて書くくらいなら return 条件; だよなあそりゃレビューで落とすでしょ感
それを可読性が落ちると言ってつっぱねたというのがすごい。? true : falseがついている方が読みにくいと超個人的には思うけどね。
俺も、ゴミつけたら読み難いとしか思えないが、読み易い読み難いってのは個人の感性というか感想だから仕方ないのだろう。とはいえ自分に都合がよいからといって、一般的でないことやって読み難いから止めろと言われても、つっぱねるってのは、エンジニアを仕事にするの向いてないというか、チームに存在するだけで迷惑な奴ってことだから仕事変えて趣味だけに留めるべきだろうな。
https://twitter.com/fnya/status/1192039284821250048 [twitter.com]別ツイートで、こんなことも言ってるから、つまみぐい的にプログラム書いてきて、そもそものプログラムへの理解が乏しいようだから、自分の能力不足を改善せずに目先の問題回避してきた結果、そうしないと困ってるのかもね。そのあたりも思考方向がエンジニア向きじゃなさそう。
TokusiN @toku51n 11月6日返信先: @fnyaさん
trueとの比較は危険なのでやってはいけない。もしどうしてもbool型との比較が必要なのであれば!=falseにしなければいけない。1件の返信 2件のリツイート 10 いいね
fnya@Web/Mobileアプリ構築中 @fnya 11月6日
危険というのは、PHPやJavaScriptでオブジェクトがtrue判定されることですか?1件の返信 0件のリツイート 0 いいね
TokusiN @toku51n 11月6日
いえ、trueと評価されるべきものがfalse判定されることがあります。1件の返信 0件のリツイート 3 いいね
fnya@Web/Mobileアプリ構築中 @fnya11月6日
?!1件の返信 0件のリツイート 0 いいね
?!じゃねえよ。頭が正常系でできてんのか?
昔の C で bool 型を整数型の typedef とかでやってた頃の話じゃね?C99 以降の stdbool.h 使ってる分には true との比較になんか問題あるかなあ??
ダメ_Bool は暗黙のキャストにおいて優先度が一番低いから、その手の比較に関しての問題は_Boolが無かった時代とまったく同じ。
https://twitter.com/toku51n/status/1192100468144521216 [twitter.com] の流れの話だと思うけども、_Boolの変数に対してif (変数 == true) {}したとして、「_Bool は暗黙のキャストにおいて優先度が一番低い」という話がなんで出てくるのかがまずわからん
わからんってことは、その流れが微塵も理解できてないってことだよ。
a が 1でないなら
if (a) -> trueif (a==true) -> false
になるってこと。キャストの優先順位が低いということは、trueって書いても、それは数字の 1 と比較してることににしかならん。(そもそもの話として stdbool の true は _Bool型じゃなくて、int 型の 1なんだけどな)
みんな分かってると思うけど補足。
!= false と書くべきって理由は、false 、true は値としては 0 、1 になるってところ。そこに 2 とか 3 とかの値が来たときにどう動くのか、それを考えろってこと。
0 、1 以外は想定外? それならそれを保証しろ、と。ドキュメントとか assert() とかでも良いけど、実環境の実行時には無力。
あと、ツイートの「条件式だけで動作する」ってやつは「式の値」だと思うけど、C 特有で分かりにくいとは思う。「副作用」もあるだろうし。
_Bool は 0 か 1 以外の値取り様ないだろアホか
少なくとも C の仕様だと _Bool が 0と1が保持できることは保証してるけど、 0 と 1しか値ととらないことは保証してないよ。
https://kikakurui.com/x3/X3010-2003-01.html [kikakurui.com]> 6.3.1.2論理型 任意のスカラ値を_Bool 型に変換する場合,その値が 0 に等しい場合は結果は 0 とし,それ以外の場合は 1 とする。
とあるけども、0 と 1 以外の値を取らせる方法教えてPLZ
未定義動作を挙げる意図がわからん
未定義動作だから、何が入ってるかわからないんだろ。_Bool型だから0/1しかありえないって前提は成立しない。
「0 と 1 以外の値を取らせる方法」の意味が理解できない池沼は無理しなくて良いよw
未定義動作挙げてる時点で「正しく書かれたプログラムではそうする方法はない」と言ってるのと同じなんだよなあ
Cなんだから、アドレスとってメモリ書き換えればいくらでも書き換えられるよ?
未定義動作挙げる意図が分からん
頭が正常系でできてんのか?
これ重要な指摘かと。プログラマたるもの鼻から悪魔を出させるようなことはしたくないにちがいないのですが、だいたいの処理系の鼻には悪魔がたくさん住み着いているので。
未定義処理の内容は規格外だよバカなの?
どこに未定義動作が?bool型変数のアドレスを取ること?アドレスをchar*型にキャストすること?char*型変数で受けること?アドレスのメモリに任意の値を放り込むこと?
どんなバイナリ吐いてるんだろう...
gccがおかしいだけなような気がするhttps://godbolt.org/z/ZyKjvX [godbolt.org]
「型_Bool として宣言されたオブジェクトは,値 0 及び 1 を格納するのに十分な大きさをもつ」領域であり、そこをchar*でキャストして書き込んでるんだから未定義動作だしょ。
マが読みやすい読みにくいと言う場合は大抵認知的負荷に関する発言だから個人の感性の問題ではないよ。ただ、計算機科学やソフトウェア工学の分野の人間は認知科学に関する知識が絶望的に足りてないから他分野とは言え知らなすぎると言うのは問題だろうね。
計算機科学やソフトウェア工学の人間に「お前らが普段から言ってるクラスだの何だのも認知科学とか存在論とかオントロジーとかと領域被ってんぞ」って言っても理解され難いし。
>危険というのは、PHPやJavaScriptでオブジェクトがtrue判定されることですか?はまあ、アレよ。真偽値が抽象化されてて(真偽値型がある)真偽値の生の表現に変換できない言語しか触ったこと無いんじゃないの?boolean型やtrue/falseの定義を気にしなくていい言語。
それでは、? true : false の有無による認知的負荷の違いについて、認知科学の立場から説明して下さい。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
海軍に入るくらいなら海賊になった方がいい -- Steven Paul Jobs
発端? (スコア:3, 参考になる)
きっかけはこのおもしろい(オブラートに包んだ表現)ツイートではないかな
https://twitter.com/fnya/status/1192036095820615680 [twitter.com]
Re: (スコア:0)
return (条件)? true : false; なんて書くくらいなら return 条件; だよなあ
そりゃレビューで落とすでしょ感
Re: (スコア:0)
それを可読性が落ちると言ってつっぱねたというのがすごい。
? true : false
がついている方が読みにくいと超個人的には思うけどね。
Re:発端? (スコア:0)
俺も、ゴミつけたら読み難いとしか思えないが、読み易い読み難いってのは個人の感性というか感想だから仕方ないのだろう。
とはいえ自分に都合がよいからといって、一般的でないことやって読み難いから止めろと言われても、つっぱねるってのは、エンジニアを仕事にするの向いてないというか、チームに存在するだけで迷惑な奴ってことだから仕事変えて趣味だけに留めるべきだろうな。
https://twitter.com/fnya/status/1192039284821250048 [twitter.com]
別ツイートで、こんなことも言ってるから、つまみぐい的にプログラム書いてきて、そもそものプログラムへの理解が乏しいようだから、自分の能力不足を改善せずに目先の問題回避してきた結果、そうしないと困ってるのかもね。
そのあたりも思考方向がエンジニア向きじゃなさそう。
Re:発端? (スコア:2, 参考になる)
TokusiN @toku51n 11月6日
返信先: @fnyaさん
trueとの比較は危険なのでやってはいけない。もしどうしてもbool型との比較が必要なのであれば!=falseにしなければいけない。
1件の返信 2件のリツイート 10 いいね
fnya@Web/Mobileアプリ構築中 @fnya 11月6日
危険というのは、PHPやJavaScriptでオブジェクトがtrue判定されることですか?
1件の返信 0件のリツイート 0 いいね
TokusiN @toku51n 11月6日
いえ、trueと評価されるべきものがfalse判定されることがあります。
1件の返信 0件のリツイート 3 いいね
fnya@Web/Mobileアプリ構築中 @fnya11月6日
?!
1件の返信 0件のリツイート 0 いいね
?!じゃねえよ。頭が正常系でできてんのか?
Re: (スコア:0)
TokusiN @toku51n 11月6日
返信先: @fnyaさん
trueとの比較は危険なのでやってはいけない。もしどうしてもbool型との比較が必要なのであれば!=falseにしなければいけない。
1件の返信 2件のリツイート 10 いいね
昔の C で bool 型を整数型の typedef とかでやってた頃の話じゃね?
C99 以降の stdbool.h 使ってる分には true との比較になんか問題あるかなあ??
Re: (スコア:0)
ダメ
_Bool は暗黙のキャストにおいて優先度が一番低いから、その手の比較に関しての問題は_Boolが無かった時代とまったく同じ。
Re: (スコア:0)
https://twitter.com/toku51n/status/1192100468144521216 [twitter.com] の流れの話だと思うけども、
_Boolの変数に対して
if (変数 == true) {}
したとして、「_Bool は暗黙のキャストにおいて優先度が一番低い」という話がなんで出てくるのかがまずわからん
Re: (スコア:0)
わからんってことは、その流れが微塵も理解できてないってことだよ。
a が 1でないなら
if (a) -> true
if (a==true) -> false
になるってこと。
キャストの優先順位が低いということは、trueって書いても、それは数字の 1 と比較してることににしかならん。
(そもそもの話として stdbool の true は _Bool型じゃなくて、int 型の 1なんだけどな)
Re: (スコア:0)
みんな分かってると思うけど補足。
!= false と書くべきって理由は、false 、true は値としては 0 、1 になるってところ。
そこに 2 とか 3 とかの値が来たときにどう動くのか、それを考えろってこと。
0 、1 以外は想定外? それならそれを保証しろ、と。ドキュメントとか assert() とかでも良いけど、実環境の実行時には無力。
あと、ツイートの「条件式だけで動作する」ってやつは「式の値」だと思うけど、C 特有で分かりにくいとは思う。「副作用」もあるだろうし。
Re: (スコア:0)
!= false と書くべきって理由は、false 、true は値としては 0 、1 になるってところ。
そこに 2 とか 3 とかの値が来たときにどう動くのか、それを考えろってこと。
0 、1 以外は想定外? それならそれを保証しろ、と。ドキュメントとか assert() とかでも良いけど、実環境の実行時には無力。
_Bool は 0 か 1 以外の値取り様ないだろアホか
Re: (スコア:0)
少なくとも C の仕様だと _Bool が 0と1が保持できることは保証してるけど、 0 と 1しか値ととらないことは保証してないよ。
Re: (スコア:0)
https://kikakurui.com/x3/X3010-2003-01.html [kikakurui.com]
> 6.3.1.2論理型 任意のスカラ値を_Bool 型に変換する場合,その値が 0 に等しい場合は結果は 0 とし,それ以外の場合は 1 とする。
とあるけども、0 と 1 以外の値を取らせる方法教えてPLZ
Re: (スコア:0)
Re: (スコア:0)
未定義動作を挙げる意図がわからん
Re: (スコア:0)
未定義動作だから、何が入ってるかわからないんだろ。
_Bool型だから0/1しかありえないって前提は成立しない。
Re: (スコア:0)
「0 と 1 以外の値を取らせる方法」の意味が理解できない池沼は無理しなくて良いよw
Re: (スコア:0)
未定義動作挙げてる時点で「正しく書かれたプログラムではそうする方法はない」と言ってるのと同じなんだよなあ
Re: (スコア:0)
Cなんだから、アドレスとってメモリ書き換えればいくらでも書き換えられるよ?
Re: (スコア:0)
未定義動作挙げる意図が分からん
Re:発端? (スコア:1)
これ重要な指摘かと。
プログラマたるもの鼻から悪魔を出させるようなことはしたくないにちがいないのですが、だいたいの処理系の鼻には悪魔がたくさん住み着いているので。
Re: (スコア:0)
で、未初期化のintがintの範囲内になることが期待できる処理系であっても
未初期化の_Boolは大抵の場合0でも1でもない値になるって話
Re: (スコア:0)
未定義処理の内容は規格外だよバカなの?
Re: (スコア:0)
どこに未定義動作が?
bool型変数のアドレスを取ること?
アドレスをchar*型にキャストすること?
char*型変数で受けること?
アドレスのメモリに任意の値を放り込むこと?
Re: (スコア:0)
Re: (スコア:0)
Re: (スコア:0)
どんなバイナリ吐いてるんだろう...
Re: (スコア:0)
gccがおかしいだけなような気がする
https://godbolt.org/z/ZyKjvX [godbolt.org]
「型_Bool として宣言されたオブジェクトは,値 0 及び 1 を格納するのに十分な大きさをもつ」領域であり、そこをchar*でキャストして書き込んでるんだから未定義動作だしょ。
Re: (スコア:0)
マが読みやすい読みにくいと言う場合は大抵認知的負荷に関する発言だから個人の感性の問題ではないよ。
ただ、計算機科学やソフトウェア工学の分野の人間は認知科学に関する知識が絶望的に足りてないから他分野とは言え知らなすぎると言うのは問題だろうね。
計算機科学やソフトウェア工学の人間に「お前らが普段から言ってるクラスだの何だのも認知科学とか存在論とかオントロジーとかと領域被ってんぞ」って言っても理解され難いし。
>危険というのは、PHPやJavaScriptでオブジェクトがtrue判定されることですか?
はまあ、アレよ。
真偽値が抽象化されてて(真偽値型がある)真偽値の生の表現に変換できない言語しか触ったこと無いんじゃないの?
boolean型やtrue/falseの定義を気にしなくていい言語。
Re: (スコア:0)
それでは、? true : false の有無による認知的負荷の違いについて、認知科学の立場から説明して下さい。