- オブジェクト指向の活用方法を教えて下さい
33 :デフォルトの名無しさん[sage]:2014/03/27(木) 00:03:01.47 ID:gcsG9K2Q - >>29
少し微妙なところはあるけれど、 >>30の > のような、1つのクラスに1つのプロパティと1つのメソッドしかないような > ものばかり作っているのが原因ではないかと思えてきました ということであれば、その程度じゃ理解し難いと思うよw 処理と定義文の行が同じぐらいだろうからね。 普通は一つのクラスに、複数のプロパティとメソッドある。 関数やクラスの定義のための行よりも、処理の行数のほうが圧倒的に多い。 小さな問題なら関数さえ使わなくていい。 数行で終わる単純なスクリプトなら実際にそうする。 多くのプログラミング技術っていうのは、大きくて複雑な問題を 解決するために考えだされているものだから、 簡単な問題を使わなくても出来る というのは意味がなくて 大きな問題で比較しないといけない。
|
- オブジェクト指向の活用方法を教えて下さい
39 :デフォルトの名無しさん[sage]:2014/03/27(木) 00:18:11.94 ID:gcsG9K2Q - 俺もダイオードは関数だと思わ。
そんな単機能のものではなく、 ダイオードなどを使って作られる製品。 ダイオードなどのパーツを組み合わせて作る製品 その製品を作るために各パーツどうやって組み合わせて効率よく作るか という方法論としてソフトウェアではオブジェクト指向があると思うよ。
|
- Git 8
629 :デフォルトの名無しさん[sage]:2014/03/27(木) 00:24:20.37 ID:gcsG9K2Q - > gitがソースコード管理システムだからだろ。
> プロジェクト管理システムじゃない。 これは gitがソースコード管理システムだからだろ。 デプロイシステムじゃない。 という方が適切だと思う。 ディレクトリが必要なのは、デプロイつまり動作するときであって 動作させるにはディレクトリ作成以外にもパーミッション設定とか サーバーごとの設定とか色々あるわけで、 こういうのはデプロイとしてやるべきことだと思う。
|
- Git 8
630 :デフォルトの名無しさん[sage]:2014/03/27(木) 00:28:10.33 ID:gcsG9K2Q - 考えてみたら、スクリプト言語のせいなんかな?
gitはカーネル開発のために作られた つまりC言語、コンパイルする言語。 コンパイルする言語だと、チェックアウトした時に 空のディレクトリを作成する必要ないでしょう? makeしないと動かさないわけでディレクトリが 必要ならmakeで作成すればいいわけで。 チェックアウトしたソースコードのそのままの位置で 動かそうとするスクリプト言語だから空のディレクトリが 必要だと思っちゃう。
|
- オブジェクト指向の活用方法を教えて下さい
43 :デフォルトの名無しさん[sage]:2014/03/27(木) 00:32:34.40 ID:gcsG9K2Q - 一つのプロパティしかないクラスであっても
アプリ全体で、そのクラスだけしか使ってないってことはまず無い。 小さなクラスしか見てないからわからないのであって アプリ全体という大きなもので考えよう。 小さなクラスが数個あろうが、このクラスは他のクラスと 協調して動くでしょう? そういうところまで含めて考えないとダメだよ。 小さな視点ではなく、大きな視点を持つこと。 大きな視点を持てば、たまたまプロパティが一つしか 無いクラスがあったとしても、それがシステム全体として 必要なことであればなんら不思議ではない。
|
- Subversion r14
892 :デフォルトの名無しさん[sage]:2014/03/27(木) 00:39:10.88 ID:gcsG9K2Q - svnってのはキーボードに書いてある
カタカナで読むんだよ。 つまり、 って所で自分のキーボードには カナの刻印がないことに気づいて挫折したでござる。
|
- オブジェクト指向の活用方法を教えて下さい
45 :デフォルトの名無しさん[sage]:2014/03/27(木) 00:41:16.91 ID:gcsG9K2Q - オブジェクト指向の話で
クラスとインスタンスの話で 終わっちゃう人がいるけど、 オブジェクト指向の話には インスタンスとインスタンスを組み合わせて動かすという 構造の話、組み合わせ方の話も含まれるよ。
|
- オブジェクト指向の活用方法を教えて下さい
46 :デフォルトの名無しさん[sage]:2014/03/27(木) 00:42:23.36 ID:gcsG9K2Q - インスタンスとインスタンスを組み合わせだけじゃなくて
クラスとクラスの組み合わせも。 (クラスの代わりにインターフェースだったりもする) ほんと関数の中身などという小さな部分じゃなくて 全体を見ないとね。
|
- オブジェクト指向の活用方法を教えて下さい
49 :デフォルトの名無しさん[sage]:2014/03/27(木) 00:47:32.14 ID:gcsG9K2Q - IoCやDIを使うところは構造に関する所だと思う。
クラスがアプリの構造を表している所だと思う。 クラス(インスタンス)を値として使う場合 たとえばBigInt型みたいな、int値の巨大版みたいな "値" にはDIを使わない方がいい。 こういう場合は値として普通にnewした方がいい。
|
- Git 8
632 :デフォルトの名無しさん[sage]:2014/03/27(木) 00:49:53.18 ID:gcsG9K2Q - >>631
”今どきは” でしょう? つまり今どきじゃないやり方では ソースコードをチェックアウトして make的なことをせずに、そのまま動かすことに 心当たり、あるでしょう?
|
- Subversion r14
894 :デフォルトの名無しさん[sage]:2014/03/27(木) 00:53:50.17 ID:gcsG9K2Q - >>893
え? レーザー刻印とかじゃない 安物キーボードなんじゃない?
|
- オブジェクト指向の活用方法を教えて下さい
51 :デフォルトの名無しさん[sage]:2014/03/27(木) 01:07:11.24 ID:gcsG9K2Q - >>50
えと、そのコードを客観的に評価してもらったことある? たとえばコードメトリクスツールで計測するとか。 その評価がないと、それ見てもなんの参考にもならない。 体育会系的に無駄で非効率な努力すれば 行数なんて稼げるしね。 コピペがだめな行為だってのは言うまでもないと思うけど、 コピペをすると簡単に行数稼げるよ。
|
- オブジェクト指向の活用方法を教えて下さい
52 :デフォルトの名無しさん[sage]:2014/03/27(木) 01:17:32.04 ID:gcsG9K2Q - >>50
ちょうど手元に今作っているソフトのカバレッジ結果を 開いていたから書くわ。オープンソースなので詳細は伏せるけど 1. 秘密 2.1 行数 約750行 2.2 関数の数 98個 2.3 変数の数 不明 (計測する意味が無い) 2.4 ファイル数 20個 2.5 クラス 25個 3. コードメトリクス 10点満点中 9.5 4. カバレッジ 90% ちなみに一番、評価が低い関数だけど行数32行 行数は問題ではなくて、一つの関数にifとループが 多いから(と言っても8個)評価が低くなってる。
|
- オブジェクト指向の活用方法を教えて下さい
54 :デフォルトの名無しさん[sage]:2014/03/27(木) 01:21:39.80 ID:gcsG9K2Q - >>50
> 2.1 1,000行〜10,000行 > 2.2 5個〜20個 1関数あたり、200行〜500行ってことでいい? これは多い。コードを把握するために一目で スクロールしないで見渡せることが重要なので一画面が目安。 だいたい50行〜長くても100行
|
- オブジェクト指向の活用方法を教えて下さい
55 :デフォルトの名無しさん[sage]:2014/03/27(木) 01:23:40.03 ID:gcsG9K2Q - >>53
変数は増やす意味は無い。 それで良いコードになったりも悪いコードになったりもしない。 どちらかと言えば少ない方がいいが、 少なくするほどいいってことでもなく無駄を無くす程度でいい。
|
- オブジェクト指向の活用方法を教えて下さい
60 :デフォルトの名無しさん[sage]:2014/03/27(木) 01:32:11.42 ID:gcsG9K2Q - アンチパターン(悪いコートパターン)本に
"メイン"ルーチン という名前がでてきたら それはアンチパターンだって書いてあった気がするなw 1関数10行?それが5個で 1000行 - 10*5 = メインルーチンが950行? 関数20個でもメインルーチン800行だよね? 一度コード品質計測してみるといいよ。 10点満点中1点未満とか言われるだろうから。
|
- オブジェクト指向の活用方法を教えて下さい
62 :デフォルトの名無しさん[sage]:2014/03/27(木) 01:37:53.70 ID:gcsG9K2Q - で、なんでコードの品質の話をしたかだけど、
技術力が低い人は、良いコードとダメなコードの違いがわからないから。 >>50の内容から、君がまだ良いコードがどんなものか わからないレベルだろうってことがわかるわけ。 だからそのレベルでオブジェクト指向の利点がわからないのも無理はないし、 現時点でオブジェクト指向は意味が無いって結論づけたらダメだよ。 単に君がまだ未熟だから(それははっきりわかった)ってだけだから。
|
- オブジェクト指向の活用方法を教えて下さい
64 :デフォルトの名無しさん[sage]:2014/03/27(木) 01:47:38.94 ID:gcsG9K2Q - >>61
プログラムの実行順が気になる? それは抽象化ができてないから。 長いコードがあって、その順番まで意識しないといけなくなってる。 つまりそのコードは細かい断片で考えることができないということだよ。 変数もスコープが広くなってるね。着目したい変数でgrepしてわかるということは 変数名は長くなっているはず。でないと他の変数名とかぶるはずだからね。で、関数は使われてないと。 (関数が適切に使われていれば同じ"ローカル"変数名が何度も出てくる。同じでいいから名前考える手間省けるよ?) 関数は引数と戻り値があるだけ。それはいつどのタイミングでも使っても良い。 このようになっていれば、全体のことは考えずにその関数という小さな部分で考えることが出来る。 大きなものを大きなまま作るのではなく小さな物にしていく。 そうすれば順番なんて気にすることはないよ。 順番なんて気にしていたら、ユニットテストで関数をテストするときどうするのさ? ユニットテストではある関数を狙い撃ちでテストするのよ?
|
- オブジェクト指向の活用方法を教えて下さい
65 :デフォルトの名無しさん[sage]:2014/03/27(木) 01:48:13.52 ID:gcsG9K2Q - >>63
なんでそう思ったの? 俺は新人に教育している気分なんだけどw
|
- オブジェクト指向の活用方法を教えて下さい
68 :デフォルトの名無しさん[sage]:2014/03/27(木) 01:53:16.02 ID:gcsG9K2Q - LoCは「同じ仕様のアプリを作った時に短いほうが優れているだろう」という
判断には使えるがそれ以外の目的では使えないよ。 LoCが多くてもは生産性が高いことにはならない (たとえばコピペをすれば簡単に水増しできるが、これは品質を下げる行為)
|
- オブジェクト指向の活用方法を教えて下さい
70 :デフォルトの名無しさん[sage]:2014/03/27(木) 02:05:57.47 ID:gcsG9K2Q - >>67
> 関数呼び出しが発生することになってしまいます。それが必然性が > ないものだったら、ロジックを追いづらいし それも俺の中では答えが出てる。 それは関数呼び出しをした時、関数の中まで見ないとロジックが わからないようなコード(関数)になっているから。 たとえば、printf()という関数、その関数の中まで追ってみないでしょう? それは関数名さえ見れば、中を追わなくてわかるから。 追わなくてもわかるというのは、脳に記憶できているということ。 関数の仕様がわかりやすいものは記憶できるが 中で何やっているかさっぱりな関数は記憶できない。 そういう関数は複雑ということ。記憶できないような関数を作らない。 大きなアプリを作るとき、コードをいちいち読んでいたらいくら時間があっても足りない。 だから読む時間を記憶することで圧縮する。とはいっても複雑なものは記憶できないし、 数が多くても記憶できない。俺は記憶術の天才じゃないのでね。 だから、関数はできるだけ単純な機能にする。複雑で高機能なものをたくさん作るよりも (たくさん作ると名前をつけるのに困るし) 単純なものを少数作って、それを組み合わせるほうが覚えることが少ない。 中を見ないとわからないような関数は作らない。そういうのはだめな関数。 (オブジェクト指向にする理由としてオブジェクトという単位でグループ分けしておけば、覚えやすいというのもある) そうやって読むべき所を減らしていけばいいんだよ。関数の中を見なくて済むような そんな関数にしていけば、関数呼び出しが発生してもロジックは追える。見なくて言い分早く追える。
|
- オブジェクト指向の活用方法を教えて下さい
83 :デフォルトの名無しさん[sage]:2014/03/27(木) 20:31:07.44 ID:gcsG9K2Q - >>74
> 実際にはprintf()の中身は複雑なんですけどね。 いや、知ってるってw 複雑だけど、関数にすることで、 ”中を見なくて良くなっている" これがいい関数の例。 中を見ないと、どんなことやってるかわからないよ〜。 となってるのが、悪い関数の例。
|
- 【JavaScript】スクリプト バトルロワイヤル42【pl,rb,php,py】
919 :デフォルトの名無しさん[sage]:2014/03/27(木) 20:35:38.74 ID:gcsG9K2Q - >>913
> ES6のclass構文はただの糖衣構文 > 柔軟性やや落ちるが見た目が良い書き方が追加された程度のもの > そんなに大したものじゃない プログラミング言語の文法はほぼ全てが糖衣構文だろ? 糖衣構文でないものってなんだよ? よく使われるパターンに、糖衣構文を作ることで 可読性を上げて短くコードをかけるようにして バグを減らして開発をしやすくしてきたんだろう? 開発効率を上げるために、糖衣構文を作ることは重要な事で その程度なんて言っちゃいけないことだと思うんだが?
|
- グラフィカルなプログラミング言語ない?
603 :デフォルトの名無しさん[sage]:2014/03/27(木) 21:14:49.17 ID:gcsG9K2Q - コードを読めない人・・・グラフィカルがいいと思っている
コードを読める人・・・テキストがいいことをわかっている。 コードを読めない人が成長すると、 コードを読める人になる。 ようするにグラフィカルがいいと思ってるのは たんにコードが読めないから。 読めないからグラフィカルになれば俺にもわかるはずと 夢を抱いているが、それはありえないので。
|
- グラフィカルなプログラミング言語ない?
605 :デフォルトの名無しさん[sage]:2014/03/27(木) 21:19:22.06 ID:gcsG9K2Q - ハードウェアエミュレータの話でもしているの?
ハードウェアをどうにかするって話で 言語じゃないじゃんw
|
- 【JavaScript】スクリプト バトルロワイヤル42【pl,rb,php,py】
921 :デフォルトの名無しさん[sage]:2014/03/27(木) 21:22:29.43 ID:gcsG9K2Q - いや、ほとんどのものが構文の書き換えで実装できるんだが?
たとえばループは比較とジャンプに書き換えられる。
|
- 【JavaScript】スクリプト バトルロワイヤル42【pl,rb,php,py】
923 :デフォルトの名無しさん[sage]:2014/03/27(木) 21:23:52.05 ID:gcsG9K2Q - アセンブラにある機能で
表現できない文法なんてないからね。 アセンブラから見たら、 すべてが糖衣構文にすぎない。
|
- 【JavaScript】スクリプト バトルロワイヤル42【pl,rb,php,py】
924 :デフォルトの名無しさん[sage]:2014/03/27(木) 21:25:58.68 ID:gcsG9K2Q - すべての言語は最終的にマシン語で動いている
アセンブラは、マシン語と命令を一対一で結びつけたもの
|
- グラフィカルなプログラミング言語ない?
607 :デフォルトの名無しさん[sage]:2014/03/27(木) 21:29:03.37 ID:gcsG9K2Q - >>606
そうやって長々と説明しているけど、 文字で書けば一行だからねw そう、効率の問題。
|
- オブジェクト指向の活用方法を教えて下さい
85 :デフォルトの名無しさん[sage]:2014/03/27(木) 21:34:12.95 ID:gcsG9K2Q - >>84
何をやってるのかさっぱりわからないのは、 ストリーム演算子の中身の話であって、 そのストリーム演算子を使う人は 中身を見なくても、使えるでしょう? 関数の中身を見ないとロジックが追えないというのは つまりこういうことだよ。(関数名は例ではない) function process() { initialize(); calc_price(); save_data() }
|
- 【JavaScript】スクリプト バトルロワイヤル42【pl,rb,php,py】
928 :デフォルトの名無しさん[sage]:2014/03/27(木) 21:41:43.61 ID:gcsG9K2Q - >>925
> ジャンプ命令ひとつとっても、今時gotoのない言語は珍しくない それ墓穴w そういうレスが来ることを想定していた。 さて、じゃあループは糖衣構文か否か、 >>925が言ってるのは、言語にgotoがあればループは糖衣構文であり gotoがなければ糖衣構文でないということになる。 言い換えると、 class構文はある言語に○○(これが何かは知らんがw)があれば、糖衣構文であって、 ○○がなければ、糖衣構文ではないということになる。 class構文はいろんな言語にあるが、class構文そのもので糖衣構文決まるわけじゃない。 ○○があるかないかで決まる。 「class構文はある言語によっては、糖衣構文ではない素晴らしい物」なのに、 JavaScriptには(ループを実現できるgotoがあるのと同じように) classを実現できる低レベル命令があるからclass構文が素晴らしくないと言っていることになる。 それはclass構文の正当な評価ではない。
|
- 【JavaScript】スクリプト バトルロワイヤル42【pl,rb,php,py】
929 :デフォルトの名無しさん[sage]:2014/03/27(木) 21:44:40.27 ID:gcsG9K2Q - だから、class構文は冗長なコードを簡潔に書くことが
出来る糖衣構文だから素晴らしいものである。というべき。 ループなどの登場でgotoが必要なくなったように、 classを実現する冗長なコードが必要なくなるわけだから。 そうやってプログラミング言語は進化をしてきた。 これこそがプログラミング言語の進化の本質。
|
- 【JavaScript】スクリプト バトルロワイヤル42【pl,rb,php,py】
930 :デフォルトの名無しさん[sage]:2014/03/27(木) 21:45:42.93 ID:gcsG9K2Q - class構文が糖衣構文ではないと言ってるわけじゃないんだよ。
糖衣構文だから素晴らしいということ。 素晴らしいものなのに「たかが」なんて言ってはいけない。
|
- グラフィカルなプログラミング言語ない?
610 :デフォルトの名無しさん[sage]:2014/03/27(木) 23:50:42.62 ID:gcsG9K2Q - >>608
それ、クラスのインターフェースしか 作れて無いぞw そんなインターフェース定義よりも、 量が多いのは、インターフェースの中身だろう?
|
- P2P型の完全匿名掲示板はまだ出来ないの?その4
449 :デフォルトの名無しさん[sage]:2014/03/27(木) 23:52:06.00 ID:gcsG9K2Q - >>447
運用されているのはそのとおりだが、 電子署名は関係ないだろ? なくてもいい存在。
|
- オブジェクト指向の活用方法を教えて下さい
99 :デフォルトの名無しさん[sage]:2014/03/27(木) 23:55:40.61 ID:gcsG9K2Q - >>86
> 俺流オペレータが何をやってるのかは中を見なと判らないでしょ いつオペレータの話したの? ストリーム演算子の話だったよね?
|