回答編集履歴

1

解説を追加

2018/01/31 01:58

投稿

miyabi-sun
miyabi-sun

スコア21194

test CHANGED
@@ -12,9 +12,7 @@
12
12
 
13
13
 
14
14
 
15
- ※念のため書いておきますが、コールバック関数の使いみちは私がすぐ思いつかなかっただけで沢山あります!
15
+ ※念のため書いておきますが、コールバック関数の使いみちは私がすぐ思いつかなかっただけで沢山あります!探してみてください。
16
-
17
- 探してみてください。
18
16
 
19
17
 
20
18
 
@@ -100,11 +98,21 @@
100
98
 
101
99
  そしてプログラムはコードを上から下に向かって流れるように実行します。
102
100
 
103
- つまりですね、この2〜3秒の間、ただ待ちぼうけるにはパソコンにとっては非常に長い時間となるですね。
101
+ この2〜3秒の間、ただ待ちぼうけるにはパソコンにとっては非常に長い時間となるですね。
104
102
 
105
103
  そこで、スレッドやプロセスという単位で区切って「お前は通信を待ち受けろ、俺は残りの処理を行う」という風に役割分担してローカルで出来る他の仕事をしにいく作りになっています。
106
104
 
105
+
106
+
107
+ 待ちぼうけするPHPは単におバカなようですが、WebサーバであるApacheと連携する際、Apacheは最初の起動時にPHPのプロセスを8個同時に起動しておいて、HTTPアクセスが来る度に開いているPHPプロセスを1個割り当てて対応しているんですね。
108
+
109
+ つまり切符の販売窓口みたいな解決策を取っているので、1人のお客様を対応する時は、そのプロセスは待ちぼうけする作りで良いわけですね。
110
+
111
+
112
+
107
- 多くの言語はこの非同期処理にJavaScriptのようにコールバック関数を利用するという解決法を採用しています。
113
+ 非同期処理にJavaScriptのようにコールバック関数を利用するという解決法を採用している言語もあります。
114
+
115
+ この辺の思想は言語によってまちまちですので違いを調べてみると面白いと思います。
108
116
 
109
117
 
110
118
 
@@ -116,8 +124,18 @@
116
124
 
117
125
 
118
126
 
127
+ リスト操作にもコールバック関数を利用するケースがあります。
128
+
119
129
  JavaScriptでリスト操作用のメソッドの[map](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/map)や[forEach](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)を活用しつつ、[FizzBuzz](https://ja.wikipedia.org/wiki/Fizz_Buzz)を解いてみます。
120
130
 
131
+ 下記のメソッドの違いを確かめながら下記のコードを眺めると面白くなるかもしれません。
132
+
133
+
134
+
135
+ - map: 地図という意味の他に、工場生産で複数の品をプレス加工で一気に作る時もmapと呼ばれます。プログラミングの世界では配列の全ての要素に関数を適用して、戻り値を元に新しい配列を作り直す動きをします。
136
+
137
+ - forEach: 単にeachと書かれる事もあります、mapと同じく関数を適用するところまでは同じですが、戻り値を受け取らず捨てる所が違いです。配列の要素1つずつに処理を適用していくことを明示しています。
138
+
121
139
 
122
140
 
123
141
  ```JavaScript