アカウント名:
パスワード:
「他の条件が同じならば」が抜けてるから、そういうズレた議論になるんだと思う。
単純なものを実現するコードより、複雑なものを実現するコードの方が複雑になるのは当たり前。しかし「他の条件が同じならば」「同じことを実現するには」簡潔でシンプルな方が良い。
世の中には簡単なことを実現するにも、無駄に長くて複雑でデバッグも修正も出来ないコードを書く人がいるんだよ。そういうコードは、スパゲッティコードとか呼ばれたりするんだけどね。
できれば複雑な物も簡潔になるように実装して欲しいなあ
複雑なものを過剰に簡潔にしすぎると、却って可読性を下げたりするからなあ
while(*src++ = *dst++);みたいなコードは賛否わかれますね。条件式の中に本処理とイテレーションを突っ込みまくってループ本体は空、こういうコードは一般的には汚く複雑であるとみなされますが、よく知られた「慣用句」ならば簡潔でよいとされることも多々あります。
言語の構文を越えた、「実装の語彙」の問題のように思います。
終了条件が分からない…。領域が保護されることが前提の言語なのかな?
元ネタは,Cの文字列をコピーする事例
いや、たぶん親コメントはそういうことを突っ込んでいるわけじゃなくて…。それはそうと、src と dst って逆じゃないです?>#2413752
末尾が '\0' でターミネートされてるのが前提
確実にこの前提が守られるとしても、領域が重なっていて *dst の末尾を *src が上書きしてしまうケースがまずくないですか。
#2413752です。単に言いたかったことは3行目以降なんですけど、引き合いに出したK&Rコードが古色蒼然すぎたみたいですね。「srcとdstが逆」→「pとqの方が簡潔ですよね」みたいな展開も期待したんですが、ミスリードさせすぎてすみません…。
それはstrcpy()ライブラリ関数でも一緒。
そこは「簡潔にする必然性があるのは、ロジックであってソースじゃない」って教育は必用でしょう。最近なんて必死に頭を使って最効率化して書いたソースでも、素に可読性優先で冗長に書いたソースでもコンパイラ出力は変わらんかったりする位だし。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
あつくて寝られない時はhackしろ! 386BSD(98)はそうやってつくられましたよ? -- あるハッカー
「他の条件が同じならば」 (スコア:2)
「他の条件が同じならば」が抜けてるから、そういうズレた議論になるんだと思う。
単純なものを実現するコードより、複雑なものを実現するコードの方が複雑になるのは当たり前。
しかし「他の条件が同じならば」「同じことを実現するには」簡潔でシンプルな方が良い。
世の中には簡単なことを実現するにも、無駄に長くて複雑でデバッグも修正も出来ないコードを
書く人がいるんだよ。そういうコードは、スパゲッティコードとか呼ばれたりするんだけどね。
Re: (スコア:0)
できれば複雑な物も簡潔になるように実装して欲しいなあ
Re:「他の条件が同じならば」 (スコア:0)
複雑なものを過剰に簡潔にしすぎると、却って可読性を下げたりするからなあ
Re:「他の条件が同じならば」 (スコア:2, 興味深い)
while(*src++ = *dst++);
みたいなコードは賛否わかれますね。
条件式の中に本処理とイテレーションを突っ込みまくってループ本体は空、
こういうコードは一般的には汚く複雑であるとみなされますが、
よく知られた「慣用句」ならば簡潔でよいとされることも多々あります。
言語の構文を越えた、「実装の語彙」の問題のように思います。
Re: (スコア:0)
終了条件が分からない…。
領域が保護されることが前提の言語なのかな?
Re:「他の条件が同じならば」 (スコア:1)
末尾の文字をコピーした時点で,評価値が 0 (偽) になってループは終了する.
Re:「他の条件が同じならば」 (スコア:3)
いや、たぶん親コメントはそういうことを突っ込んでいるわけじゃなくて…。それはそうと、src と dst って逆じゃないです?>#2413752
確実にこの前提が守られるとしても、領域が重なっていて *dst の末尾を *src が上書きしてしまうケースがまずくないですか。
Re: (スコア:0)
#2413752です。
単に言いたかったことは3行目以降なんですけど、
引き合いに出したK&Rコードが古色蒼然すぎたみたいですね。
「srcとdstが逆」→「pとqの方が簡潔ですよね」みたいな展開も期待したんですが、ミスリードさせすぎてすみません…。
Re: (スコア:0)
それはstrcpy()ライブラリ関数でも一緒。
Re: (スコア:0)
そこは「簡潔にする必然性があるのは、ロジックであってソースじゃない」って教育は必用でしょう。
最近なんて必死に頭を使って最効率化して書いたソースでも、素に可読性優先で冗長に書いたソースでもコンパイラ出力は変わらんかったりする位だし。