Algorithms1.概要あなたがCSを勉強したことがあるならば、あなたは間違いなくコンパイラまたは類似した何かについてのコースを受講しました。これらのクラスでは、有限オートマトン(有限状態機械としても知られています)の概念が教えられています。これは言語の文法規則を形式化する方法です。finite__automaton[件の詳細について読むことができますここに]。それでは、この忘れられた概念が、新しいコンパイラーの構築を心配する必要がない私たち、上級プログラマーにとってどのように役立つのでしょうか。実のところ、この概念によって多くのビジネスシナリオが単純化され、複雑なロジックについて推論するためのツールが得られることがわかりました。簡単な例として、外部のサードパーティ製ライブラリを使わずに入力を検証することもできます。2.アルゴリズム一言で言えば、そのようなマシンは状態と、ある状態から別の状態に移行する方法を宣言します。ストリームを通過させると、次のアルゴリズム(疑似コード)を使ってその形式を検証できます。print("Invalid");}現在の状態から文字がある矢印があれば、オートマトンは与えられた文字を「受け入れる」と言います。状態の切り替えとは、ポインタがたどられ、現在の状態が矢印の指す状態に置き換えられることを意味します。最後に、ループが終了したら、オートマトンが「停止」できる(現在の状態が二重丸で囲まれている)かどうか、およびその入力が使い果たされたかどうかを確認します。実際のアルゴリズムを確認するために、JSONオブジェクト用の簡単なバリデータを書きましょう。これはオブジェクトを受け取るオートマトンです:リンク:/uploads/json__dfa-2.png%20784w[]valueは、string、integer、boolean、null、または別のJSONオブジェクトのいずれかになります。簡潔にするために、この例では文字列のみを検討します。コード有限状態機械を実装することは非常に簡単です。state();}それらの間の関係は次のとおりです。追従できるトランジションのリストがあります。あることに注意してください。これは主にその単一のインスタンスが複数回使用される可能性があるためです。メソッドは、流暢さを期して、トランジションが追加された後のインスタンスを返します。それが最終的なもの(二重丸で囲まれている)かどうかも示します。与えることができます。constructors}上記のコードはhttps://github.com/eugenp/tutorials/tree/master/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/automata[here]です。この実装では、どのステートマシンも構築できるはずです。冒頭で説明したアルゴリズムは、次のように簡単です。machine.switchState(String.valueOf(json.charAt(i)));}assertTrue(machine.canStop());テストクラスhttps://github.com/eugenp/tutorials/blob/ef7400484c2409ae25a82874e16a1b8d53ba2b32/algorithms/src/test/java/algorithms/RtFiniteStateMachineLongRunningUnitTest.java[RtFiniteStateMateStateMachStateMachStateMachStateMachStateMachStateMachStateMachStateMachStateMachStateMachStateMachStateMachStateMachStateMachStateMachStateMachStateMach()());)}))))))))))上記の画像よりもいくつかの状態が追加されていることに注意してください。これは、文字列を囲む引用符も正しく捉えるためです。4.まとめ有限オートマトンは、構造化データの検証に使用できる優れたツールです。複雑な入力になると複雑になる可能性があるため、一般的にはあまり知られていません(トランジションは1文字しか使用できないため)。それにもかかわらず、それはそれがルールの簡単なセットをチェックすることになると素晴らしいです。最後に、有限ステートマシンを使用してさらに複雑な作業を行いたい場合は、https://github.com/statefulj/statefulj[StatefulJ]およびhttps://github.com/hekailiang/squirrel[squirrel]の2つが参考になりますに。コードサンプルを確認できます。