マーチン・ファウラーのプログラミングバンザイ [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
関数の適切な長さとは? マーチン・ファウラー氏は、長さより意図と実装の分離、そしてよい関数名が重要だと指摘
http://www.publickey1.jp/blog/17/post_262.html >>62
大規模開発もコンパイラの実装もやったことがない
雑魚がクソ禿げコンサルの戯言を金言として
無根拠に自分が優れたプログラマだと思い込むことでしょうか?わかりませんはい論破 1000行ひたすらループやら分岐やらが続いてるコードと
意味ある単位で、何してるのか自明な名前の関数にバラされてるコードだったら
考えるまでもなく後者のほうがわかりやすいな >>15
10000行超えててもコンパイルできるの?CompiledMethodの制限超えそう >>67
1000行だった。あとコメント抜いた行数? >>68
#linesOfCode のソースはこんな感じ。コメントは含むが空行は除く。
CompiledMethod >> linesOfCode
"An approximate measure of lines of code.
Includes comments, but excludes empty lines."
| lines |
lines := 0.
self getSource asString lineIndicesDo: [:start :endWithoutDelimiters :end |
endWithoutDelimiters > start ifTrue: [lines := lines+1]].
^lines >>69
念のためこの #linesOfCode というメソッド自身の linesOfCode は 8 を返す
(CompiledMethod >> #linesOfCode) linesOfCode "=> 8 " 自分をバカだと自覚していないバカが最も成長しない
熱意のあるバカは企業とって最も足手まといになる 英語できない日本人は、ちゃんとした名前の関数やメソッドを大量に作る心理的ハードル高いし
余計にダラダラ書いちゃいそう >>5の"highlight"メソッドの中身が"revese"というのは
ダイレクトにsmalltalkの流れを汲んでるObjective-Cなどをやってると
『クラスに命令(メッセージ)を送って動作させる』という思想が徹底してるから
ロボットに命令したら終わり(後は任せて追わなくていいように作れ)という
投げっぱなし前提思想と"人間が"何を自分で命令したか
後で明確にわかるように命令コマンド名を決めておけという
わかりやすい前提に基づいているのだけど、
まったく異なる思想でクラスや関数を捉えてる言語の側に住んでいると
「A=B=Cなら全部Aと書けばいいではないか!」で意図そのものが伝わらない。
そもそも自分がこいつに何をさせたか?という状態とコマンドの記述の話なので。 > まったく異なる思想でクラスや関数を捉えてる言語の側に住んでいると
どの言語のどの関数の話? smalltalkって見た目が最高にキモイな(褒め言葉) >>31
そもそも、>>1に長さが問題なんじゃないって書いてあるのにね。 長さが問題だっていうのなら単に関数を細切れにして
短くすれば問題解決になるはずだが
もちろんそんなことはありえないしな
ただ意図と実装の分離をちゃんと行えば
自然と関数は短くなる
短いからと言って良いと言い切れるわけではないが
長い関数であれば殆どの場合ダメと言っていいということ 古い言語だと短いけど訳がわからないコードもあるよね
昔のプログラマはオナニストばかりだったからコードが臭い >>80
たんに英語が読めないだけとかそういうことじゃなく? CやC++ができる人がObjective-Cのコード見て
「なにがなんだかわからん!変態だ!」って言ってたのといっしょじゃね?
そのまま永久に「Objective-Cは変態だかダメ!」って言い続けてたし。 長さが絶対的基準ではないだろうが長すぎるのはやはり問題。 Smalltalkのメッセージ式はお世辞にも短いとはいえないが、英語として読むにはぎり許容範囲
ただObjective-Cはそれに型情報も入れてさらに英語としても成り立たせようとする慣習があって長すぎ
それなのにXcodeにはつい最近まで補完がなかったってんだから信じられない >>82
Cしか知らないから、ぱっと見 >> と ^ がわからん
|a|は引数かローカル変数に見えた >>87
>> はそのメソッドが属するクラスを示すのに慣習的に用いられるものでメソッド定義時には使いません。
^ はリターンで Smalltalk 唯一の制御構文でもあります。
| a | がローカル変数宣言というのは合っています。
Smalltalk の式の文法は receiver message で、message は引数がないときはメソッド名そのまま、
引数があるときは、メソッド名に引数の数だけ含まれるコロンの場所で分断して、そこに引数を挿入する記法をとります。
たとえば、普通の言語(ただしメソッド名にコロンを含むことができると仮定)で obj.x:y:z:(a, b, c) という式は
obj x: a y: b z: c となります。ちなみに、Smalltalk ではメソッド名をメッセージセレクタ、あるいは短くセレクタとも呼びます。
メソッド定義は メッセージパーターン テンポラリ変数宣言 式 で構成されます。
メッセージパターンというのは、前述の式の message 部分と同じ記法でセレクタと仮引数を宣言するための部分です。
したがって、x: a y: b z: c | t1 t2 | t1 := a + b. t2 := c. ^t1 * t2 は、x:y:y: というメソッドを仮引数 a b c で定義したものになります。
このメソッドを定義を文字列で、たとえば compile: メソッドの引数としてクラスに送ってやることで、メソッドを定義できます。
Integer compile: 'x: a y: b z: c | t1 t2 | t1 := a + b. t2 := c. ^t1 * t2'.
1 x: 2 y: 3 z: 4 "=> 20 "
[:a :b | a + b] などというのはブロックと呼ばれる無名関数で、
引数はコロンを頭に置いたブロック引数宣言と処理内容を表わす式を | で区切って [ ] で括って記述します。
ブロックは第一級オブジェクトなので、代入やメソッドの引数にすることができます。 1000行の処理がザラとか言ってるやつ、registとか書いてそう。 誰でも簡単にパソコン1台で稼げる方法など
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。
グーグル検索⇒『宮本のゴウリエセレレ』
CMRDMROXHN ☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆ ttps://martinfowler.com/articles/201803-refactoring-2nd-ed.html とても簡単な自宅で稼げる方法
参考までに書いておきます
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
8GEWS ■ このスレッドは過去ログ倉庫に格納されています