回答編集履歴
6
言語の標準ライブラリnoh
answer
CHANGED
@@ -75,10 +75,14 @@
|
|
75
75
|
|
76
76
|
そこで、**ライブラリ**や**API**を自作すると、
|
77
77
|
長期的に使うので、評価しやすいと思います。
|
78
|
-
|
79
78
|
ライブラリ作成は大変なので、小物を多く作るといいです。
|
80
|
-
また、**言語の標準ライブラリ**を見るのも、参考になると思います。
|
81
79
|
|
80
|
+
また、RubyやJavaなど、普段使っている
|
81
|
+
**言語の標準ライブラリ**を学ぶのも、参考になると思います。
|
82
|
+
|
83
|
+
言語の開発元は、その言語がよく分かっているので、
|
84
|
+
クラスの分け方など、多くの場合で参考になる点が多いと思います。
|
85
|
+
|
82
86
|
とくに、オブジェクト指向が真価を発揮するのは、
|
83
87
|
長期的に使われるクラスライブラリやフレームワークです。
|
84
88
|
たとえば、引数が少ないと使いやすいです。
|
5
サンプルコードに「// 処理」を追加
answer
CHANGED
@@ -33,6 +33,7 @@
|
|
33
33
|
|
34
34
|
```
|
35
35
|
function add(str arg_a, str arg_b){
|
36
|
+
// 処理
|
36
37
|
return str result
|
37
38
|
}
|
38
39
|
```
|
@@ -46,6 +47,7 @@
|
|
46
47
|
|
47
48
|
```
|
48
49
|
function get_full_name(str first_name, str last_name){
|
50
|
+
// 処理
|
49
51
|
return str full_name
|
50
52
|
}
|
51
53
|
```
|
4
サンプルコードの「sum」を「add」に変更
answer
CHANGED
@@ -32,7 +32,7 @@
|
|
32
32
|
**名前**や**引数**、**返り値**に注目します。
|
33
33
|
|
34
34
|
```
|
35
|
-
function
|
35
|
+
function add(str arg_a, str arg_b){
|
36
36
|
return str result
|
37
37
|
}
|
38
38
|
```
|
3
「使う場所を探す必要」を加筆
answer
CHANGED
@@ -42,6 +42,7 @@
|
|
42
42
|
|
43
43
|
でも、引数と返り値の型が文字列なので、計算ではないはずです。
|
44
44
|
中の実装を読むまで、何をやっているのか分からない関数です。
|
45
|
+
しかも場合によっては、読んでも分からなくて、使う場所を探す必要があったりして。
|
45
46
|
|
46
47
|
```
|
47
48
|
function get_full_name(str first_name, str last_name){
|
2
サンプルコードが分かりにくいと考え、差し替え
answer
CHANGED
@@ -29,17 +29,29 @@
|
|
29
29
|
ふたつ目は、**外側**から見る方法。
|
30
30
|
|
31
31
|
関数やメソッドの処理よりも、
|
32
|
-
**名前**や**引数**、**
|
32
|
+
**名前**や**引数**、**返り値**に注目します。
|
33
33
|
|
34
34
|
```
|
35
|
-
function sum(
|
35
|
+
function sum(str arg_a, str arg_b){
|
36
|
-
return
|
36
|
+
return str result
|
37
37
|
}
|
38
38
|
```
|
39
39
|
|
40
40
|
たとえば上記は、特定の言語を想定したものではない疑似コードですが、
|
41
|
-
|
41
|
+
関数名をパッと見て「引数の和を返すのかな?」と思ってしまうかもしれません。
|
42
42
|
|
43
|
+
でも、引数と返り値の型が文字列なので、計算ではないはずです。
|
44
|
+
中の実装を読むまで、何をやっているのか分からない関数です。
|
45
|
+
|
46
|
+
```
|
47
|
+
function get_full_name(str first_name, str last_name){
|
48
|
+
return str full_name
|
49
|
+
}
|
50
|
+
```
|
51
|
+
|
52
|
+
そこでこれなら、姓と名前を引数に取って、氏名を返す関数だと、
|
53
|
+
**実装を見なくても**想像がつきますね。
|
54
|
+
|
43
55
|
実装を読まなくても使えると、使いやすいモジュールになります。
|
44
56
|
言語の標準ライブラリなどを使うときは、実装を読まないと思います。
|
45
57
|
|
1
疎結合などの設計原則の話を加筆
answer
CHANGED
@@ -40,7 +40,13 @@
|
|
40
40
|
たとえば上記は、特定の言語を想定したものではない疑似コードですが、
|
41
41
|
二つの引数の和を返すだろうことは、**実装を見なくても**想像がつきます。
|
42
42
|
|
43
|
+
実装を読まなくても使えると、使いやすいモジュールになります。
|
44
|
+
言語の標準ライブラリなどを使うときは、実装を読まないと思います。
|
45
|
+
|
46
|
+
**いかに読む量を減らせるか、覚える量を減らせるか**が設計力です。
|
47
|
+
**疎結合**とか**単一責務**などの**設計原則**も、それに沿っています。
|
48
|
+
|
43
|
-
この発展で、抽象クラスや(Javaの)**インターフェイス**に、
|
49
|
+
さらに、この発展で、抽象クラスや(Javaの)**インターフェイス**に、
|
44
50
|
注目することは有効だと思います。それらに実装はないけれど、
|
45
51
|
プログラムの骨格になっているので、設計上重要な要素です。
|
46
52
|
|