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
850
Other Decks in Technology
See All in Technology
「大丈夫そう?」をObservabilityで確かめる
mrmtsu
0
250
DORA_Metrics.pdf
wagnerfusca
1
140
Execution in the Kingdom of Agents: Reflections on Abstraction and Complexity
bcantrill
0
640
FinTech 1-2 : Overview of FinTech
ks91
PRO
0
120
Lambda MicroVMsは常駐サーバーの代わりに なるか? Kiro Crew を動かして検証してみた / Kiro Crew on Lambda MicroVMs
k_adachi_01
2
350
Snowflake Horizon Catalog と Apache Iceberg で作る オープンなデータ基盤
kitagawaz
0
370
私の推しは「聞いてから進む」AIです -AI-DLCに一人でアプリを作らせた話
yama3133
1
160
10年欲しかった音楽管理アプリを、AIと一緒に作りはじめた
judau
1
200
3人で1000GPU超を統合運用する?マルチクラウド&オンプレを跨ぐ、構築と運用のリアル!
kazukun0716
2
800
猫でもわかるKiro Web
kentapapa
1
160
「とりあえず動く」の先へ。 AI時代のチーム開発と内部設計/2026-slsdays
slsops
0
100
CI/CDではもう遅い - 人とAIが迂回しないDevSecOps Verify基盤の再設計 -
kintotechdev
1
620
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
225
10k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Into the Great Unknown - MozCon
thekraken
41
2.7k
Building AI with AI
inesmontani
PRO
1
1.3k
Faster Mobile Websites
deanohume
310
32k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
470
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.2k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
[SF Ruby Conf 2025] Rails X
palkan
3
1.4k
The Curious Case for Waylosing
cassininazir
1
550
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
まとめ
まとめ 動的型付け言語で比較演算子を使うときは === , !=== を 使うこと
まとめ 動的型付け言語で比較演算子を使うときは === , !=== を 使うこと 初めて触る言語については,言語仕様についてよく確認する こと
まとめ 動的型付け言語で比較演算子を使うときは === , !=== を 使うこと 初めて触る言語については,言語仕様についてよく確認する こと 引数の受け渡し方法はディープコピー?シャローコピー?