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

回答編集履歴

1

解説を追加

2018/01/31 01:58

投稿

miyabi-sun
miyabi-sun

スコア21482

answer CHANGED
@@ -5,8 +5,7 @@
5
5
  - 非同期処理
6
6
  - リスト操作
7
7
 
8
- ※念のため書いておきますが、コールバック関数の使いみちは私がすぐ思いつかなかっただけで沢山あります!
8
+ ※念のため書いておきますが、コールバック関数の使いみちは私がすぐ思いつかなかっただけで沢山あります!探してみてください。
9
- 探してみてください。
10
9
 
11
10
  ---
12
11
 
@@ -49,16 +48,26 @@
49
48
  光の速度は1秒間に地球をたった7周しか出来ませんので、そこからHTTP通信等のやり取りを行うと余裕で2〜3秒必要だったりします。
50
49
 
51
50
  そしてプログラムはコードを上から下に向かって流れるように実行します。
52
- つまりですね、この2〜3秒の間、ただ待ちぼうけるにはパソコンにとっては非常に長い時間となるですね。
51
+ この2〜3秒の間、ただ待ちぼうけるにはパソコンにとっては非常に長い時間となるですね。
53
52
  そこで、スレッドやプロセスという単位で区切って「お前は通信を待ち受けろ、俺は残りの処理を行う」という風に役割分担してローカルで出来る他の仕事をしにいく作りになっています。
54
- 多くの言語はこの非同期処理にJavaScriptのようにコールバック関数を利用するという解決法を採用しています。
55
53
 
54
+ 待ちぼうけするPHPは単におバカなようですが、WebサーバであるApacheと連携する際、Apacheは最初の起動時にPHPのプロセスを8個同時に起動しておいて、HTTPアクセスが来る度に開いているPHPプロセスを1個割り当てて対応しているんですね。
55
+ つまり切符の販売窓口みたいな解決策を取っているので、1人のお客様を対応する時は、そのプロセスは待ちぼうけする作りで良いわけですね。
56
+
57
+ 非同期処理にJavaScriptのようにコールバック関数を利用するという解決法を採用している言語もあります。
58
+ この辺の思想は言語によってまちまちですので違いを調べてみると面白いと思います。
59
+
56
60
  ---
57
61
 
58
62
  # リスト操作
59
63
 
64
+ リスト操作にもコールバック関数を利用するケースがあります。
60
65
  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)を解いてみます。
66
+ 下記のメソッドの違いを確かめながら下記のコードを眺めると面白くなるかもしれません。
61
67
 
68
+ - map: 地図という意味の他に、工場生産で複数の品をプレス加工で一気に作る時もmapと呼ばれます。プログラミングの世界では配列の全ての要素に関数を適用して、戻り値を元に新しい配列を作り直す動きをします。
69
+ - forEach: 単にeachと書かれる事もあります、mapと同じく関数を適用するところまでは同じですが、戻り値を受け取らず捨てる所が違いです。配列の要素1つずつに処理を適用していくことを明示しています。
70
+
62
71
  ```JavaScript
63
72
  var range = function (start, end) {
64
73
  var arr = [];