teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

6

言語の標準ライブラリnoh

2017/12/21 17:03

投稿

LLman
LLman

スコア5592

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

サンプルコードに「// 処理」を追加

2017/12/21 17:03

投稿

LLman
LLman

スコア5592

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」に変更

2017/12/21 16:48

投稿

LLman
LLman

スコア5592

answer CHANGED
@@ -32,7 +32,7 @@
32
32
  **名前**や**引数**、**返り値**に注目します。
33
33
 
34
34
  ```
35
- function sum(str arg_a, str arg_b){
35
+ function add(str arg_a, str arg_b){
36
36
  return str result
37
37
  }
38
38
  ```

3

「使う場所を探す必要」を加筆

2017/12/21 16:43

投稿

LLman
LLman

スコア5592

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

サンプルコードが分かりにくいと考え、差し替え

2017/12/21 13:28

投稿

LLman
LLman

スコア5592

answer CHANGED
@@ -29,17 +29,29 @@
29
29
  ふたつ目は、**外側**から見る方法。
30
30
 
31
31
  関数やメソッドの処理よりも、
32
- **名前**や**引数**、**り値**に注目します。
32
+ **名前**や**引数**、**り値**に注目します。
33
33
 
34
34
  ```
35
- function sum(int arg_a, int arg_b){
35
+ function sum(str arg_a, str arg_b){
36
- return int result
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

疎結合などの設計原則の話を加筆

2017/12/21 13:25

投稿

LLman
LLman

スコア5592

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