条件文、引数、戻り値指定について考えるスレ【(), [], return】 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
プログラマが頭を使う部分、オリジナリティを発揮できる部分が、
()の中と、
[]の中だけであって、
その他の部分は、よくよく考えると「決まりに忠実に従うだけ」
のような気がする。
そこで、言語を問わず、if() for() while() の()の中、
関数、クラスの () の中、
配列の[]の中などをどのように記述するかを議論したいと思う。
更に、戻り値のreturnの指定方法についても同時に考えるスレです。
(或いは、break, continueなど) > プログラマが頭を使う部分、オリジナリティを発揮できる部分
それは名前
クラス名、関数名、変数名
適切なファイルに適切なコードを書いて
適切な名前をつける。
そこが一番オリジナリティをはっきりできる場所だ。
それすらわかってない素人は引っ込んでろ ぶっちゃけ関数の中なんて適当でいい。
もちろんシンプルであるべきだけどそれは最善の場合であって
最低限、引数と戻り値というインターフェースが
適切であればそれでいい。
そのインターフェースが適切かどうかを判断する
方法の一つが、適切な名前であるかどうかでもある。 関数、クラスなどのインターフェースが適切であれば
テストコードを容易に書くことができる。
テストコードがあれば、中身は後からシンプルに変えることもできる。
重要なのは中身ではなくてインターフェス MZ何とかじゃねーの?
こんなんコンパイラ作りたいと思ってるあほ以外興味ないやろ そもそも従来の if() for() while() は使わない時代になっている。
関数型の文化が取り入れらてきた結果
条件分岐やループを使う機会そのものが減っている。
アルゴリズムと呼ばれるものはたいていライブラリ化されそれを呼ぶだけ。
関数は数行程度にするべきだし、そこにオリジナリティを発揮するようなコードが
出てくることは殆ど無い。シンプルを追求するわけだから、最小のコードに収束する 2NsOdIiQへの反論
そのオブジェクト指向の構造も突き詰めれば
if() for() while() を使用した基本構造からな成り立っている。
各言語や、ライブラリ毎に別々の名前別々の文法が定義され
言語や仕様が変われば、その「名前」や文法は毎回覚えなければ
ならない。それらが滞りなく動くには、それなりに繋げなければ、
ならないし、「繋げる」ためには細かくて複雑で、なおかつ
時と共に変化しやすいルールを沢山覚えなければならない。
それは仕様やルールに支配されている状態と言えるだろう。
それらも大切じゃないわけではないと思う。だけど
2NsOdIiQの意見にはは真っ向から批判したいと思う。 if() 等の分岐はオブジェクトの多態性(OOPの特性)で、for() の主要な用途である要素の列挙処理も
for() を使わずに配列などのコレクションに対する直接的な作用として記述可能(関数型の影響)で、
さらに、if() for() while() が他と関数(オブジェクト指向の場合はメソッドと呼ぶが)と同様の呼び出し記述
(メッセージ送信)で済ませることが可能な Smalltalk 等の場合、記述は簡潔でルールも少ないまま保たれているよ >>2
被らない名前さえ付けとけば、後でいくらでも変えられるから、適当で良い。 >>13
名前をつけるタイミングは問題にしていない
最終的には一番重要な名前を正しくつけろという話だ 被らない名前って連番かしら?w
func0001
func0002
func0003 名前ってアルゴリズムやデータ構造より大事なん??
なぜ名前が重要? >>16
もしアルゴリズムやデータ構造に
名前がない所を想像してみればいい。
どうやって他人にそれを理解させる?
でてくるたびにコードを読まなければ
それが何かが理解できないだろ?
名前が適切でないと時間を無駄に費やすことになるんだよ。 でも名前という殻ができたら、もう誰も中身を見ようとしないだろ?
名前
名前の名前
名前の名前の名前
場所の名前
名前の場所
場所の名前の場所
名前の場所の名前…
これが連鎖したら実際に動いている本体がなんなのか、どこにあるのか、何がしたいのか、
何が悪いのか、わからんくなるやろ。 > でも名前という殻ができたら、もう誰も中身を見ようとしないだろ?
見れる状態であれば、見る必要があるときだけ見ればいい。
標準ライブラリの中身は見ないだろ 可読性を高くするというのは言い換えると
見なくていいものを増やすということ
見ないでも分かるものが増えれば増えるほど
読むものが減る=可読性が高くなる そしたらさ、何よりつまらなくないか?
そして本当に動くのか最後この最後に確認できるまで不安にならないか?
そして、もし記述がちょっとでも間違ったらやはり、動かないだろ?
デバッグしようにもアルゴリズム的なデバッグとちがい、ひたすら「その名前のものは見当たらなかった」と格闘するだけだろ。 人によって言語とか開発環境とか作ってる物とかチームや企業の方針とかのバックグラウンドが違うし、
みんな自分のバックグラウンドを前提に話すから話が?み合わない事は良くあるけどさ
>>21が良く分からない まだ小さなファイルに分割することを
知らない段階なんだろ >>1 が唯一頭を使う部分をきっぱりと明言しちゃったのに対し、
>>2 が食いついたせいで論点がずれ取るがな、
オブジェクト指向云々はさておき
それはさておきスマートな条件文を考えるのは大切っしょ。 > それはさておきスマートな条件文を考えるのは大切っしょ。
誰も賛同してないことに気づけよw スマートな条件文ってなにさ
if文書くなら誰が見てもわかる≒C言語を踏襲すべきだしスマートにするならhaskell的にもはやif文じゃなくなる
前提からして変なんだよ>>1は とりあえず=> <= === != && || 使用禁止
この演算子使うやつは屑 理由が書いてないルールは不完全。
不完全なルールは存在してないものとみなすべき。 それはルールを決めた理由であって
ルールの理由ではない 言語ごとに異なる演算子を使うのは
たしかに愚かなことだ
しかし、=> === 以外はデファクトスタンダードだよな? Rubyでは || は 変数が空だったら入れるというイディオムでよく使われている。
nilガードって名前がついているぐらい。
&& はショートカット演算子ともいわれてこれまたよく使われる。
=== は言語によっては==の機能強化版になってるのでよく使われる。
!= はunlessがない言語ではこっちのほうが可読性が高い
=> はJavaScriptではアロー関数式、Perlではファットカンマだが
演算子として使われているのはしらない。
<= が使える言語なんてあるのか? pythonのイテレータ文法とスライスが簡潔かつ最強 >>32
<= は Verilog の代入で使う。 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
ERUWP >>32
<= 使えないとどうやって「x が 10 以下」を表すんだよ? ■ このスレッドは過去ログ倉庫に格納されています