LETWW、パート2:“正規表現はかなり混乱し、使用することは困難です.”


ELMを学ぶには間違った方法があります.

  • 私は戻って、誰もが、私はより多くの罪の償いを持っている.バックルアップ.
    エルムを使用する選択は、私がこれまでの私の人生で最も大きな決定をするために採用した理論的根拠でなされた決定でした.私は関数型プログラミングを勉強したことがありませんでした.しかし、クライアントは彼らが望んだものを望みました、そして、私は彼らの最善の望みでした.
    私たちは幸せではなかった.それらは単純な時代だった.1
    とにかく.私はエルムの正規表現ライブラリに初めて到達したことを覚えています.エヴァンの役に立つ「ナグスクリーン」を読んでいるelm/regex パッケージドキュメント

    Generally speaking, it will be easier and nicer to use a parsing library like elm/parser instead of this.


    閉じるこの動画はお気に入りから削除されています私は医者のところへ手紙をクリックしたelm/parser .

    Regular expressions are quite confusing and difficult to use. This library provides a coherent alternative that handles more cases and produces clearer code.


    私はそこに座っていた、私のフロントポーチで、残忍な、早朝のミシガン夏の太陽-すべての69度の弱々しい激怒-と私は考えたそして、私のキャリアの初期に、私はプログラマが軽蔑して、Regexと苦闘していると聞いていました.それで、私はVimをこれまでに使って、Regexを熱心に研究するためにそれを私のビジネスにしました.そして、わかった.悪くない.
    スマッシュカット
    point : Parser Point
    point =
      succeed Point
        |. symbol "("
        |. spaces
        |= float
        |. spaces
        |. symbol ","
        |. spaces
        |= float
        |. spaces
        |. symbol ")"
    
    ... そして、レコードの傷.
    「まあ、今日はレグックスを使っているようですね.」
    いくつかの時間が経過し、“私は”デコーダを使用する方法を学んだを除いて、私は実際にどのようにデコーダを使用する方法を学ぶことはなかった、私はちょうど十分に仕事を行うに十分な手探り.2 Decode.Pipeline 特に良かった.私は、それがそれらのすべてで何をしていたかについて、わかりませんでした|> しかし、それは視覚的なレベルでクリックしました.
    ある日、エルムスラックの誰かが何かを言いました.Parser 'と同じようにDecode.Pipeline 「見たParser 再び.私は再び博士を読んだ.私の脳は理解していないだけではなく、なぜ理解していないか理解していないということをしました.

    あなたがそれをこれまでにしたならば、先端はここにあります:「私はこれを理解しません」と、「私がなぜこれを理解しないかについて、私は理解しません」との間で違いを特定することを学んでください、そして、それに応じてあなたの質問をフォーマットしてください。あなたはさらに速くなるでしょう。


    もっと時間が過ぎた.年.私はいくつかの試みを学ぶしようとしてParser 仕事をしましたが、毎回、私は医者にそれをまわりに作りました、私は不慣れと混乱のその同じ感覚に襲われました.しかし、途中で、私は、その時点で、無関係であるように思えた何かを学びました.
    やっと試してみたelm-review 3 , そして、私は自分のための出発点としてエルムスラックの定期的なsiriusstarrのレビューの設定を使用することを選んだ4 . 私は強制された規則のいくつかに興味をそそられた彼らのうちの1人は、私が使用していた方法で私に叫びましたDecode.Pipeline いくつかのJSONを型別名にデコードするには.コンストラクターとして型別名を使用することを禁止する規則があることがわかります!5 これは、型別名を与えられたことを意味します:
    type alias Point =
        { x : Int
        , y : Int
        }
    
    こんなふうに呼ぶのは禁じられています.
    origin : Point
    origin = Point 0 0
    
    代わりに
    origin : Point
    origin = { x = 0, y = 0 }
    
    これは以下のようなデコーダが無効であることを意味していた.
    pointDecoder : Decoder Point
    pointDecoder =
        Decode.succeed Point
            |> Pipeline.required "x" Decode.int
            |> Pipeline.required "y" Decode.int
    
    その代わりに、
    pointDecoder : Decoder Point
    pointDecoder =
        Decode.succeed (\x y -> { x = x, y = y }) 
            |> Pipeline.required "x" Decode.int
            |> Pipeline.required "y" Decode.int
    
    タイプエイリアスが位置コンストラクタであるので、あなたが複数の同じタイプの引数を順番に通過したならば、あなたは強打からあなた自身を得ることができました、それで、これはあなたがどこに行くかについてもう少し明確になることを強制します
    「ああ、それは、私が後にどんな機能も置くことができることを意味しますDecode.succeed パイプラインで、そしてDecoderDecoder 関数の出力する型についてこれは、型エイリアスがレコードの位置コンストラクターであることを知ることによる."
    私はそれを実現していなかったが、私はその謎を解くことに近づいていたParser .
    今週初め、私はこのポストの冒頭で述べたプロジェクトからいくつかのコードをリファクタリングしました.それは長年にわたって多くの経験を積んできました、しかし、クライアントはまだそれを愛しています-そして、私は何年もの間頑固に修理することから多くを学びました.私は、私のメインの支店を見つけましたupdate 関数は、私は区切り文字に基づいて分割するregexを使用して文字列の値を取っていたと、文字列が2つだけを分割した後に含まれていることを確認するナンセンスの束を行う;それらは両方とも整数である.など
    「これは、棒を貼る大きな場所のようですParser . 私が彼らを理解しさえすれば."
    「もしかしたら今回は違うでしょう」あなたは、最後の時間を言いました.「うん、でもちょっと賢い.」私たちはそれについて見ますよね."
    私は医者を引き上げた.私は|.|= , そして、私はパニックになって、凍ります.でも今回は新しい何かを試しました.
    私は、マーティンJaniczekのエリーカタログを引き上げました6 , で入力され、parser . ビンゴhttps://ellie-app.com/f2smkjHfN26a1
    私はエリーのコードを見てすぐに、それを実行することなく-私は以前から理解していたことを認識し、私はすぐにコードを理解した.
    理解の私の前の不足は、2つの本当の文の間の精神的な切断によるものでした.
    参照してください、私のアプリケーション開発経験のほとんどはCシャープにされている.CSharpでは、型別名やそのようなものはありませんが、クラスがあります.クラスには型があり、型には型があり、型の型はType , もちろん).タイプ名が「特別な」型で、10年以上の間マリーンした後に、特定の特殊な文脈でのみ呼び出されなければなりませんtypeof() , または関数の署名として-私は何が私の目の前に文字通り右見られなかった

    タイプ名は、ELMの他のすべてのように、特別ではありません。値のコンストラクタです。


    そして、私が見たとき、これはそれほど長く不明瞭でした
    Parser.succeed Point
        |= ...
    
    私は、機能を見ませんでしたParser.succeed ) 引数として別の関数をとるPoint ) そして、構文解析結果から集められた値Parser.succeed for a Special Type Name "
    それで、この渦巻き的な三日月(螺旋種族)から?7 ), 三つの教訓

    エルムのすべてが内部的に一貫していることを保証するために、大きな痛みが取られましたあなたが1つのことを理解しないならば、それはもう一つのものに基づきます-あなたがあなたがすると思うだけでなく、「もう一つのもの」を理解しない良い機会が、あります。


    and

    決してあなたが周りの最初の時間を理解していなかった再訪問のアイデアを恐れてください。あなたは現在賢いです。


    and

    この言葉は何も特別ではありません。すべてはゼロ以上の引数を持つ関数です。あなたが何かを理解していないならば、それがゼロかより多くの議論でどのように機能でありえたかについて考えてみてください。


    ヨットの仕事を聞いたことがない8 . ああまあ.海にはもっとヨットがいると思う.

    エルムスラックの誰もが今まで私にデコーダを説明している-私たちの滑らかな脳の溝を生きるまでの情報を与えるために20 'のすべての20倍になっている必要がありますライブ-場所をありがとう.畝
    いかにして福音を広めるかelm-review 重要なのは、このポストの範囲外ですあなたが知らないならばelm-review , 学ぶelm-review . すべての雹Jeroen.https://github.com/jfmengels/elm-review
    https://github.com/SiriusStarr/elm-review-rules
    https://elm.dmy.fr/packages/lue-bird/elm-no-record-type-alias-constructor-function/latest/
    https://janiczek-ellies.builtwithdark.com/
    https://sp23.org/