Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
プログラミング初心者のぼくが陥った落とし穴 / Traps for programming b...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
uoo38
February 21, 2019
Technology
240
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
820
Other Decks in Technology
See All in Technology
AIはどのように 組織のアジリティを変えるのか?
junki
1
510
連合学習と機密コンピューティング
lycorptech_jp
PRO
0
110
爆速でマルチプロダクトを立ち上げる時 事業・CTO目線で大事にしたい事
miyatakoji
0
110
2026 TECHFRESH 畢業分享會 - AI-Native 重塑軟體工程與虛擬講師
line_developers_tw
PRO
0
870
スキルと MCP ツール、責務をどう分けるか? AI が迷わないインターフェース設計の戦略
cdataj
1
980
Android の公式 Skill / Android skills
yanzm
0
130
非定型業務をAI slackbotで自動化する ~ 社内要望を自動壁打ちするbotを作った ~/automating-ad-hoc-work-with-ai-slackbot
shibayu36
0
620
データサイエンスを価値につなげるプロジェクト設計 〜 DS一年目が現場で得た気づき 〜
ysd113
1
190
現地で盛り上がった WWDC26 Keynote
zozotech
PRO
1
210
[モダンアプリ勉強会]今更聞けないGit/GitHub入門
tsukuboshi
0
370
2026TECHFRESH畢業分享會 - 葬送的通靈師:化系統與用戶雜訊成行動訊號
line_developers_tw
PRO
0
870
RAG を使わないという選択肢
tatsutaka
1
200
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
The agentic SEO stack - context over prompts
schlessera
0
810
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
The Pragmatic Product Professional
lauravandoore
37
7.3k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
190
Accessibility Awareness
sabderemane
1
140
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
4 Signs Your Business is Dying
shpigford
187
22k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
280
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
170
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
まとめ
まとめ 動的型付け言語で比較演算子を使うときは === , !=== を 使うこと
まとめ 動的型付け言語で比較演算子を使うときは === , !=== を 使うこと 初めて触る言語については,言語仕様についてよく確認する こと
まとめ 動的型付け言語で比較演算子を使うときは === , !=== を 使うこと 初めて触る言語については,言語仕様についてよく確認する こと 引数の受け渡し方法はディープコピー?シャローコピー?