$30 off During Our Annual Pro Sale. View Details »

||とorの違いは登壇して解決した

 ||とorの違いは登壇して解決した

sapi_kawahara

June 16, 2023
Tweet

More Decks by sapi_kawahara

Other Decks in Education

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  10. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  19. 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

    View Slide

  20. 2023年6月16日(金) 吉祥寺.pm 33 テーマ「原点」
    まとめ
    ● ブーリアン(boolean)と短絡評価(ショートサーキット)は奥が深

    ● この2つを調べてわかったけど、この辺りは、各言語で好き勝手
    に実装しているw
    ● そのため、多言語をやっている人は、他の言語の流儀で実装して
    しまいがち!
    ○ その結果、下らんバグとして引っかかると思う
    ● Perlの|| &&とor andの違いは、まだ理解してないので、誰か
    教えてください
    20

    View Slide

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

    View Slide