Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
プログラミング初心者のぼくが陥った落とし穴 / Traps for programming b...
Search
uoo38
February 21, 2019
Technology
250
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
プログラミング初心者のぼくが陥った落とし穴 / Traps for programming beginner
uoo38
February 21, 2019
More Decks by uoo38
See All by uoo38
Algorithm and Data Structre -Graph Algorithm-
uoo38
1
180
コンパイラ開発から学ぶ大規模開発 / Large-Scale Development Learned from Compiler Development
uoo38
0
1.3k
Cコンパイラ自作 / Progress of Developing C Compiler
uoo38
0
840
Other Decks in Technology
See All in Technology
LTのテーマ どうきめてる?〜5つの型と私のやり方〜
yama3133
1
110
HRC_Frontend_Conference_Fukuoka_2026.pdf
ts020
0
740
10Xに技術的負債をもたらした「2つの境界の歪み」その構造と解消への営み
10xinc
0
2k
リアーキテクチャ後の障害ゼロを目指したShadow Testingの取り組み
nihonbuson
PRO
1
110
登壇の自信を奪う3匹のオバケ / 3 Ghosts That Rob You of Your Confidence in Public Speaking
pauli
9
980
なぜ「決定性」が 決定的に重要なのか? Durable Execution 基盤の数理的理解 #serverlessjp / ServerlessDays Tokyo 2026
ytaka23
0
290
白金鉱業Meetup Vol.25 アウトカムが二値のデータに対するCausal Impact
brainpadpr
0
220
ソフトウェアDNAとクラウドエージェントのススメ
cloudace
0
110
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
12k
GoのInterface内部構造から学ぶ!最高パフォーマンスを出すコード設計
yappli_developers
0
110
アクセスキーこわい やめかたと漏らさない工夫
sassssan68
1
340
2026_devsumi_ozono.pdf
o3
3
510
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.8k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
550
We Are The Robots
honzajavorek
0
380
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
240
Paper Plane (Part 1)
katiecoart
PRO
2
11k
Unsuck your backbone
ammeep
672
58k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
540
[RailsConf 2023] Rails as a piece of cake
palkan
59
7k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
How to Talk to Developers About Accessibility
jct
2
550
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
660
Transcript
プログラミング初心者の ぼくが陥った落とし穴 at 静大情報LT大会 -2019年2月-
自己紹介
自己紹介 ソーシャルアカウント
自己紹介 ソーシャルアカウント Twitter: @uoo38 GitHub: uoo38
自己紹介 ソーシャルアカウント Twitter: @uoo38 GitHub: uoo38 高1でプログラミングを初めた
自己紹介 ソーシャルアカウント Twitter: @uoo38 GitHub: uoo38 高1でプログラミングを初めた プログラミング歴約7年の初心者>< 初めてKeynote使ってみた
自己紹介 ソーシャルアカウント Twitter: @uoo38 GitHub: uoo38 高1でプログラミングを初めた プログラミング歴約7年の初心者>< 初めてKeynote使ってみた 使ってみたら結構よかった
比較演算子(復習)
比較演算子(復習) 静的型付け言語(C,Javaなど)における比較演算子
比較演算子(復習) 静的型付け言語(C,Javaなど)における比較演算子 X == Y でXとYが等価のときtrue そうでないときfalse
比較演算子(復習) 静的型付け言語(C,Javaなど)における比較演算子 X == Y でXとYが等価のときtrue そうでないときfalse 関数f()の戻り値のNULLチェック
比較演算子(復習) 静的型付け言語(C,Javaなど)における比較演算子 X == Y でXとYが等価のときtrue そうでないときfalse 関数f()の戻り値のNULLチェック f() ==
NULL って書いた
クイズ
クイズ 1年目くらいで陥った落とし穴
クイズ 1年目くらいで陥った落とし穴 ここは動的型付け言語の世界(JavaScript, PHPとか)
クイズ 1年目くらいで陥った落とし穴 ここは動的型付け言語の世界(JavaScript, PHPとか) 関数f()はエラーのときnullを返す
クイズ 1年目くらいで陥った落とし穴 ここは動的型付け言語の世界(JavaScript, PHPとか) 関数f()はエラーのときnullを返す f() == null としたとき true
になるf()の戻り値はどれ?
クイズ 1年目くらいで陥った落とし穴 ここは動的型付け言語の世界(JavaScript, PHPとか) 関数f()はエラーのときnullを返す f() == null としたとき true
になるf()の戻り値はどれ? 1. null
クイズ 1年目くらいで陥った落とし穴 ここは動的型付け言語の世界(JavaScript, PHPとか) 関数f()はエラーのときnullを返す f() == null としたとき true
になるf()の戻り値はどれ? 1. null 2. 37
クイズ 1年目くらいで陥った落とし穴 ここは動的型付け言語の世界(JavaScript, PHPとか) 関数f()はエラーのときnullを返す f() == null としたとき true
になるf()の戻り値はどれ? 1. null 2. 37 3. 0
クイズ 1年目くらいで陥った落とし穴 ここは動的型付け言語の世界(JavaScript, PHPとか) 関数f()はエラーのときnullを返す f() == null としたとき true
になるf()の戻り値はどれ? 1. null 2. 37 3. 0 4. false
クイズ 1年目くらいで陥った落とし穴 ここは動的型付け言語の世界(JavaScript, PHPとか) 関数f()はエラーのときnullを返す f() == null としたとき true
になるf()の戻り値はどれ? 1. null 2. 37 3. 0 4. false 5. “sana”
クイズ 1年目くらいで陥った落とし穴 ここは動的型付け言語の世界(JavaScript, PHPとか) 関数f()はエラーのときnullを返す f() == null としたとき true
になるf()の戻り値はどれ? 1. null 2. 37 3. 0 4. false 5. “sana” 6. “” (空文字列)
クイズ 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
なぜPHPでnull以外が true?
なぜPHPでnull以外が true? たとえば null == 0
なぜPHPでnull以外が true? たとえば null == 0 nullを数値にキャストすると0になる
なぜPHPでnull以外が true? たとえば null == 0 nullを数値にキャストすると0になる (int)null で0を返す
なぜPHPでnull以外が true? たとえば null == 0 nullを数値にキャストすると0になる (int)null で0を返す 比較演算子で暗黙の型変換が行われたので両辺が等価
なぜPHPでnull以外が true? たとえば null == 0 nullを数値にキャストすると0になる (int)null で0を返す 比較演算子で暗黙の型変換が行われたので両辺が等価
暗黙の型変換を防ぐなら f() === null を使おう
クイズ
クイズ • つい最近陥った落とし穴
クイズ • つい最近陥った落とし穴 • ここは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; } ?>
クイズ • つい最近陥った落とし穴 • ここは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
クイズ • つい最近陥った落とし穴 • ここは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
クイズ • つい最近陥った落とし穴 • ここは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
クイズ • つい最近陥った落とし穴 • ここは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
クイズ • つい最近陥った落とし穴 • ここは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
クイズ • つい最近陥った落とし穴 • ここは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
どこに原因があったのか
どこに原因があったのか N = 10^6 のとき
どこに原因があったのか N = 10^6 のとき $size = count($arr); 3.10 ×
10−6 sec
どこに原因があったのか N = 10^6 のとき $size = count($arr); $arr[$size] =
$n; 9.05 × 10−6 sec 3.10 × 10−6 sec
どこに原因があったのか N = 10^6 のとき $size = count($arr); $arr[$size] =
$n; 関数呼び出し 約 9.05 × 10−6 sec 3.10 × 10−6 sec 0.01 sec
どこに原因があったのか N = 10^6 のとき $size = count($arr); $arr[$size] =
$n; 関数呼び出し 約 PHPでは引数の受け渡しはディープコピー 9.05 × 10−6 sec 3.10 × 10−6 sec 0.01 sec
どこに原因があったのか 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
どこに原因があったのか 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
どこに原因があったのか 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
まとめ
まとめ 動的型付け言語で比較演算子を使うときは === , !=== を 使うこと
まとめ 動的型付け言語で比較演算子を使うときは === , !=== を 使うこと 初めて触る言語については,言語仕様についてよく確認する こと
まとめ 動的型付け言語で比較演算子を使うときは === , !=== を 使うこと 初めて触る言語については,言語仕様についてよく確認する こと 引数の受け渡し方法はディープコピー?シャローコピー?