Upgrade to Pro — share decks privately, control downloads, hide ads and more …

プログラミング初心者のぼくが陥った落とし穴 / Traps for programming b...

uoo38
February 21, 2019

プログラミング初心者のぼくが陥った落とし穴 / Traps for programming beginner

uoo38

February 21, 2019
Tweet

More Decks by uoo38

Other Decks in Technology

Transcript

  1. クイズ 1年目くらいで陥った落とし穴 ここは動的型付け言語の世界(JavaScript, PHPとか) 関数f()はエラーのときnullを返す f() == null としたとき true

    になるf()の戻り値はどれ? 1. null 2. 37 3. 0 4. false 5. “sana” 6. “” (空文字列) PHPではtrue,JavaScriptではfalse むずすぎ>< PHPではtrue,JavaScriptではfalse PHPではtrue,JavaScriptではfalse
  2. クイズ • つい最近陥った落とし穴 • ここはPHPの世界 <?php $N = 100; $dummy

    = array_fill(0, $N, 1); $dummy = my_push_back($dummy, 2); function my_push_back($arr, $n) { $size = count($arr); $arr[$size] = $n; return $arr; } ?>
  3. クイズ • つい最近陥った落とし穴 • ここはPHPの世界 <?php $N = 100; $dummy

    = array_fill(0, $N, 1); $dummy = my_push_back($dummy, 2); function my_push_back($arr, $n) { $size = count($arr); $arr[$size] = $n; return $arr; } ?> N 10^2 10^4 10^6 time(sec) PHP 7.1.23, MacBook Pro 13-inch, 2018, 2.3 GHz Intel Core i5 1.00 × 10−5 2.31 × 10−4 1.86 × 10−2
  4. クイズ • つい最近陥った落とし穴 • ここはPHPの世界 • my_push_back関数はO(1)のアルゴリ ズムだがO(N)で動作しているっぽい <?php $N

    = 100; $dummy = array_fill(0, $N, 1); $dummy = my_push_back($dummy, 2); function my_push_back($arr, $n) { $size = count($arr); $arr[$size] = $n; return $arr; } ?> N 10^2 10^4 10^6 time(sec) PHP 7.1.23, MacBook Pro 13-inch, 2018, 2.3 GHz Intel Core i5 1.00 × 10−5 2.31 × 10−4 1.86 × 10−2
  5. クイズ • つい最近陥った落とし穴 • ここはPHPの世界 • my_push_back関数はO(1)のアルゴリ ズムだがO(N)で動作しているっぽい • どこに原因があるか?

    <?php $N = 100; $dummy = array_fill(0, $N, 1); $dummy = my_push_back($dummy, 2); function my_push_back($arr, $n) { $size = count($arr); $arr[$size] = $n; return $arr; } ?> N 10^2 10^4 10^6 time(sec) PHP 7.1.23, MacBook Pro 13-inch, 2018, 2.3 GHz Intel Core i5 1.00 × 10−5 2.31 × 10−4 1.86 × 10−2
  6. クイズ • つい最近陥った落とし穴 • ここはPHPの世界 • my_push_back関数はO(1)のアルゴリ ズムだがO(N)で動作しているっぽい • どこに原因があるか?

    1. $size = count($arr); <?php $N = 100; $dummy = array_fill(0, $N, 1); $dummy = my_push_back($dummy, 2); function my_push_back($arr, $n) { $size = count($arr); $arr[$size] = $n; return $arr; } ?> N 10^2 10^4 10^6 time(sec) PHP 7.1.23, MacBook Pro 13-inch, 2018, 2.3 GHz Intel Core i5 1.00 × 10−5 2.31 × 10−4 1.86 × 10−2
  7. クイズ • つい最近陥った落とし穴 • ここはPHPの世界 • my_push_back関数はO(1)のアルゴリ ズムだがO(N)で動作しているっぽい • どこに原因があるか?

    1. $size = count($arr); 2. $arr[$size] = $n; <?php $N = 100; $dummy = array_fill(0, $N, 1); $dummy = my_push_back($dummy, 2); function my_push_back($arr, $n) { $size = count($arr); $arr[$size] = $n; return $arr; } ?> N 10^2 10^4 10^6 time(sec) PHP 7.1.23, MacBook Pro 13-inch, 2018, 2.3 GHz Intel Core i5 1.00 × 10−5 2.31 × 10−4 1.86 × 10−2
  8. クイズ • つい最近陥った落とし穴 • ここはPHPの世界 • my_push_back関数はO(1)のアルゴリ ズムだがO(N)で動作しているっぽい • どこに原因があるか?

    1. $size = count($arr); 2. $arr[$size] = $n; 3. その他 <?php $N = 100; $dummy = array_fill(0, $N, 1); $dummy = my_push_back($dummy, 2); function my_push_back($arr, $n) { $size = count($arr); $arr[$size] = $n; return $arr; } ?> N 10^2 10^4 10^6 time(sec) PHP 7.1.23, MacBook Pro 13-inch, 2018, 2.3 GHz Intel Core i5 1.00 × 10−5 2.31 × 10−4 1.86 × 10−2
  9. どこに原因があったのか N = 10^6 のとき $size = count($arr); $arr[$size] =

    $n; 関数呼び出し 約 9.05 × 10−6 sec 3.10 × 10−6 sec 0.01 sec
  10. どこに原因があったのか N = 10^6 のとき $size = count($arr); $arr[$size] =

    $n; 関数呼び出し 約 PHPでは引数の受け渡しはディープコピー 9.05 × 10−6 sec 3.10 × 10−6 sec 0.01 sec
  11. どこに原因があったのか N = 10^6 のとき $size = count($arr); $arr[$size] =

    $n; 関数呼び出し 約 PHPでは引数の受け渡しはディープコピー 引数の受け渡しにO(N)掛かっていたんだなぁ 9.05 × 10−6 sec 3.10 × 10−6 sec 0.01 sec
  12. どこに原因があったのか N = 10^6 のとき $size = count($arr); $arr[$size] =

    $n; 関数呼び出し 約 PHPでは引数の受け渡しはディープコピー 引数の受け渡しにO(N)掛かっていたんだなぁ 引数の前に & を付けると参照渡しになる 9.05 × 10−6 sec 3.10 × 10−6 sec 0.01 sec
  13. どこに原因があったのか N = 10^6 のとき $size = count($arr); $arr[$size] =

    $n; 関数呼び出し   約 PHPでは引数の受け渡しはディープコピー 引数の受け渡しにO(N)掛かっていたんだなぁ 引数の前に & を付けると参照渡しになる そしたら10^-6秒くらいで処理されるようになったよ 9.05 × 10−6 sec 3.10 × 10−6 sec 0.01 sec