Slide 1

Slide 1 text

2023年6月16日(金) 吉祥寺.pm 33 テーマ「原点」 ||とorの違い 登壇して解決した さっぴー川原 @sapi_kawahara 1

Slide 2

Slide 2 text

2023年6月16日(金) 吉祥寺.pm 33 テーマ「原点」 自己紹介 ● さっぴー川原 @sapi_kawahara ● 老害エンジニア ● 住んでいるところは観光地の川越 ● スキル ○ ファミコンゲームの開発時代からのエンジニア。iモード登場時にはIT企業を経て、 SESで大手IT企業で常駐を経験。その後はスタートアップ企業に転職。多くの案件を 経験しており、対応できる開発言語は10を超える。 ● コンピューター関連での原点っぽいのは沢山知っていると思う 2

Slide 3

Slide 3 text

2023年6月16日(金) 吉祥寺.pm 33 テーマ「原点」 俳句 登壇は 吉祥寺から 始めよう 3

Slide 4

Slide 4 text

2023年6月16日(金) 吉祥寺.pm 33 テーマ「原点」 私の原点、その1 ● コンシューマーゲームでの開発? ● 私はファミコン時代から開発してますので、この本はツッコミどこ ろ満載でした! 4

Slide 5

Slide 5 text

2023年6月16日(金) 吉祥寺.pm 33 テーマ「原点」 私の原点、その2 ● iモードサイト?公式メニューに入るのを作ったことあります ● Web1、Web2、Web3 5

Slide 6

Slide 6 text

2023年6月16日(金) 吉祥寺.pm 33 テーマ「原点」 私の原点、その3 ● 中2病なので! ● AWSの異世界転生本書きました ● 共著は、ダムの本で有名な「のりこ」さんと、 執筆ニートの「小笠原 種高」さんです 6

Slide 7

Slide 7 text

2023年6月16日(金) 吉祥寺.pm 33 テーマ「原点」 私の原点、その4 ● プログラミングの原点というか基礎! ● ブーリアン(boolean) ● 紙版、2023年6月20日頒布予定 ● 電子版、技術書典にて頒布中 7

Slide 8

Slide 8 text

2023年6月16日(金) 吉祥寺.pm 33 テーマ「原点」 前フリいらないよ ● 今回、ブーリアン(boolean)に関する技術書を技術書典にて頒 布しましたが、未解決なことがありました ● 短絡評価(ショートサーキット)についてです ● 短絡評価(ショートサーキット)は、プログラミングをやる上では、 原点というか基本的なルールで、すべての言語の基礎!! 8

Slide 9

Slide 9 text

2023年6月16日(金) 吉祥寺.pm 33 テーマ「原点」 短絡評価(ショートサーキット) ● ちなみに、短絡評価(ショートサーキット)というのを、ご存知です か? ● 論理和(|| or)なら優先順位が高い箇所がtrueになったら、そこ で論理演算を止めちゃう!! ● 論理積(&& and)なら優先順位が高い箇所がfalseになったら、 そこで論理演算を止めちゃう!! ● エンジニアでも、短絡評価(ショートサーキット)って気にせず使っ てることが多いよね? 9

Slide 10

Slide 10 text

2023年6月16日(金) 吉祥寺.pm 33 テーマ「原点」 親の顔をよりよく見るアレ ● Perlの人なら、よく見ますよね????(主語が大きい) ○ perl -e '$file="test.txt"; open my $fh, "<",$file or die "not open file $file";' ● ファイルがないときは、◯すアレです ● test.txtというファイルがないと、論理和でfalseなので、dieが 実行されています ● test.txtというファイルがあるときは、論理和でtrueなので、短 絡評価(ショートサーキット)が動作してdieが実行しません!! 10

Slide 11

Slide 11 text

2023年6月16日(金) 吉祥寺.pm 33 テーマ「原点」 疑問があれば試すべき ● orの他に||も論理和だよな? ● 疑問に思ったら試そう!!それが執筆の基本!! ○ perl -e '$file="test.txt"; open my $fh, "<",$file || die "not open file $file";' ● アレ??ファイルがないのに短絡評価(ショートサーキット)が動作 したよ??何で?? 11

Slide 12

Slide 12 text

2023年6月16日(金) 吉祥寺.pm 33 テーマ「原点」 アレ?と思ったらドキュメントを見る! ● 疑問に思ったらドキュメントを確認だ!!!! ○ https://perldoc.jp/docs/perl/5.18.1/perlop.pod#Logical32Define d-Or ○ Perl では、フロー制御に使う場合の && と || の同義語として、 and 演算子と or 演算子が用意されています (下記参照)。 短絡の動作は全く同じです。 しか し、"and" と "or" の優先順位はかなり低くしてあるので、引数に括弧を 使ってい ないリスト演算子のあとに続けて使う場合にも、 安心して使うことができます: 12

Slide 13

Slide 13 text

2023年6月16日(金) 吉祥寺.pm 33 テーマ「原点」 短絡の動作は全く同じです 13

Slide 14

Slide 14 text

2023年6月16日(金) 吉祥寺.pm 33 テーマ「原点」 引数に括弧を 使っていないリスト演算子のあ とに続けて使う場合にも、 安心して使うこと ができます 14

Slide 15

Slide 15 text

2023年6月16日(金) 吉祥寺.pm 33 テーマ「原点」 つまり 括弧で動作が異なる? それなら試そう 15

Slide 16

Slide 16 text

2023年6月16日(金) 吉祥寺.pm 33 テーマ「原点」 引数に括弧を使う ● 括弧の花嫁 ○ perl -e '$file="test.txt"; (open my $fh, "<",$file) || die "not open file $file";' ● ちゃんと◯ぬ ● 正しく動作しました! ● ファイルがあるときは、短絡評価(ショートサーキット)は動作しま せん!! 16

Slide 17

Slide 17 text

2023年6月16日(金) 吉祥寺.pm 33 テーマ「原点」 ||は優先順が高い 括弧でくくらないといけない? よくわからん!!! 原因探求でググった 17

Slide 18

Slide 18 text

2023年6月16日(金) 吉祥寺.pm 33 テーマ「原点」 力尽きましたwwwwww 18

Slide 19

Slide 19 text

2023年6月16日(金) 吉祥寺.pm 33 テーマ「原点」 ちなみにPHPは同じ結果です ● 試してみよう! ○ php -r '$file="test.txt";@fopen($file, "r") or die("not open file $file.".PHP_EOL);' ○ php -r '$file="test.txt";@fopen($file, "r") || die("not open file $file.".PHP_EOL);' 19

Slide 20

Slide 20 text

2023年6月16日(金) 吉祥寺.pm 33 テーマ「原点」 まとめ ● ブーリアン(boolean)と短絡評価(ショートサーキット)は奥が深 い ● この2つを調べてわかったけど、この辺りは、各言語で好き勝手 に実装しているw ● そのため、多言語をやっている人は、他の言語の流儀で実装して しまいがち! ○ その結果、下らんバグとして引っかかると思う ● Perlの|| &&とor andの違いは、まだ理解してないので、誰か 教えてください 20

Slide 21

Slide 21 text

2023年6月16日(金) 吉祥寺.pm 33 テーマ「原点」 解決 ● 登壇してフォローされました ● || だと、先に$file || dieが評価されるそうです ● open文は最後まで実行するという思い込みが悪さした ● 思い込み気をつけよう 21