パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

プログラミング言語「Dart」に「null安全」版が登場」記事へのコメント

  • by Anonymous Coward

    ヽ( ・∀・)ノ┌┛ガッΣ(ノ`Д´)ノぬるぽ

    だったのが

    ヽ( ・∀・)ノ┌┛ガッΣ(´∇`) ぬるホッ

    という

    安全になったからって糞コードおkって訳じゃねぇ

    となるわけですね

    # 糞コードは世に尽きまじ

    • by Anonymous Coward

      初期化漏れとかメモリリークとか。
      オブジェクトを使用しなくなったときにnullを代入して参照外すのはどう変わるんだろう。

      • by Anonymous Coward

        初期化漏れはコンパイルが通らないので起こりえません。

        • by Anonymous Coward

          クソコードの話をしているのだから、この場合の初期化漏れは初期化されないのではなく初期値の変更忘れ。
          基底クラスのプロパティを変え忘れたとか。

          • by Anonymous Coward

            こういうコメント見ると、NULL安全はまったく理解されてないのだなぁと思うな。

            NULL安全なコードで、後で変更することを想定してる初期値なんてものは実装としても概念としても存在しない。
            NULL安全なフィールドや変数は、つねに意味のある値になっていなければならないし、実際そうなるように書く。
            常に意味がある値を持てないフィールドに、NULL安全な型をつかってはいけない。

            • by Anonymous Coward

              上で、nullObjectパターンとかの話も出てるのも、そのへんが理解されてないからだろうな。
              常に意味のある値であることを保証するための枠組みだと理解してたら、nullObjectパターンを持ってくるなんていう頓珍漢な発想が出てくる余地もないからな。

              • by Anonymous Coward

                オブジェクトの生成時にどうしても初期値を設定できない場合はあるが、そういうときはプロパティやgetterを使うなり遅延初期化なりするしな
                面倒だと思うかもしれないが、本質的に制約が大きくて面倒なんだよ

                (#3836212)は関数型言語の経験はないんだろうか
                あれこそNULL安全の代表選手なのだが

                あとnull objectはちゃんと意味がある値だぞ馬鹿

              • by Anonymous Coward

                どこでnullナシ処理を担保するかって話なだけなのにオマエらカッカしすぎ
                nullobjectで進んでも表示や保存する動的コードの前段階でナニカをしなきゃならんわけで
                素晴らしい解決法思いつかない現状ユーザーコード側に責任押し付ける安全のほうが低コストだから皆が拝んでんだよ

              • by Anonymous Coward on 2020年06月19日 15時34分 (#3836514)

                null objectにはきちんとした名前をつける必要がある
                https://en.wikipedia.org/wiki/Null_object_pattern [wikipedia.org]

                Given a binary tree, with this node structure:

                class node {
                    node left
                    node right
                }

                One may implement a tree size procedure recursively:

                function tree_size(node) {
                    return 1 + tree_size(node.left) + tree_size(node.right)
                }

                Since the child nodes may not exist, one must modify the procedure by adding non-existence or null checks:

                function tree_size(node) {
                    set sum = 1
                    if node.left exists {
                        sum = sum + tree_size(node.left)
                    }
                    if node.right exists {
                        sum = sum + tree_size(node.right)
                    }
                    return sum
                }

                This however makes the procedure more complicated by mixing boundary checks with normal logic, and it becomes harder to read. Using the null object pattern, one can create a special version of the procedure but only for null nodes:

                function tree_size(node) {
                    return 1 + tree_size(node.left) + tree_size(node.right)
                }
                function tree_size(null_node) {
                    return 0
                }

                This separates normal logic from special case handling, and makes the code easier to understand.

                このnull_nodeは普通はleafと呼ばれているので、実際のプログラムではそう名付けなければならないし、他のプログラムでnull objectを使う場合には、同様に適した名前をつけなければならない
                適した名前がついているなら、それはnullとは無関係のものだとすぐわかる

                コード片に適切な名前をつけられないのはヘボプログラマ

                親コメント
              • by Anonymous Coward

                おじさんは例外を投げるほうが好きです。
                例外を拾った側で好き勝手するほうが好きです。

計算機科学者とは、壊れていないものを修理する人々のことである

処理中...