F# には、簡潔でタイプセーフな図で複雑なドメインを表現することになる可能性のある多くの側面があります。 これを示すために、若い魔女と魔法使いのための非公立大学である Dogshorts の領域を成文化することができます。 グリフィン、スネーク、アナグマ または Raven コンドミニアム。 弁別共用体を利用して、これらの状態を示すことができます。
弁別共用体は、「合計形式」としても識別されます。 ‘、それらはフォームの単位を混合するためのアプローチです。 うんざりして、リゾートルームのラベル付けをストーリーに選択しましょう。 リゾートの客室には、番号でチケットを購入するものもあれば、「ロイヤル スイート」などの評判でチケットを購入するものもあります。 HotelRoom はこのアイデアを形作ります。おそらく Quantity
種類 int または 名前 種類
文字列.
親切 ホテルの部屋 =数量 の int | 名前 の 文字列 // それぞれが親切な HotelRoom させて 部屋1 =
量 1
させて
王立スイート=
名前 「ロイヤルスイート」
概要を説明できます4つのコンドミニアム名を合わせたドッグショーツホームズ。 この判別共用体の単純な利用は、 enum.
親切
住居
=グリフィン
|
スネーク
| 狸
|
カラス
******************************************************* 彼らの機知、勇気に応じた住居 、狡猾さ、忠誠心。 これらの特性は、
Traits 内の種類
int
のプロパティです。 回想録で、ラベル付きの不変のタプルが大好きです。 選別式の前に、生徒は 選別されていない 回顧録としてモデル化されます:
親切
特徴 ={ 機転: int 勇気 ): int 狡猾 : int 忠誠度 : int }
親切 未整理={ 名前: 弦 年: int
お金
: お金 特徴: 特徴
}
ソーティングとは、未ソート瞳孔を取り込んでを返す特性です。住居:
させて 並べ替え
生徒
=
マッチ 生徒
.
特徴 with | x いつ バツ。忠誠心
>
7 -> 狸 | x いつ バツ。勇気> 7 ->
グリフィン
| x いつ バツ。
狡猾
> 7 -> 蛇 | x いつ バツ。機転 > 7
->
カラス |
_
-> 狸
未ソート瞳孔を取り込んでを返す特性です。住居:
させて 並べ替え
生徒
=
マッチ 生徒
.
特徴 with | x いつ バツ。忠誠心
>
7 -> 狸 | x いつ バツ。勇気> 7 ->
グリフィン
| x いつ バツ。
狡猾
> 7 -> 蛇 | x いつ バツ。機転 > 7
特徴は、生徒の 特性 を検索し、最も関連性の高いコンドミニアムを返します。
忠誠心
、
勇気の特徴が7以上の大学生、
狡猾
、
ウィット
Badger
、
Gryffin
に属する、スネーク、カラス
それぞれの家。 学生の余暇はアナグマのコンドミニアム
に属しています。 学費
学生が学費の支払いを希望している場合そして、これらの料金を支払うための お金 を持っています。
魔法の世界には、ブロンズ クナット、シルバー シックル、ゴールド ガレオンの 3 つの主要なお金があります。 鎌は 29 クヌート、ガレオンは 17 鎌です。 魔法使いの金融システムは単純なもので、割り切れる最小の半分がクヌートです。 Money の回顧録では、個人の富を整数としてモデル化できます:
親切 お金 =
{
クヌーツ
: int
<
ブロンズクヌート
> 鎌 : int<
銀鎌
> ガレオン船 : int<
ゴールドガレオン
> }
Knuts
の種類定義は
int を指定しているようです
一般的な種類
bronzeKnut
の。
Sickles (
silverSickle にも同等の定義が存在します。 ) と
ガレオン (
ゴールデンガレオン ))。 これらは F# の
魔法使いの外国為替をモデル化するための測定単位間の関係を概説できます:
親切 ブロンズクヌート 親切シルバーシックル
親切
ゴールドガレオン
)let knutsPerSickle
= 29<ブロンズクヌート/シルバーシックル> let sicklesPerGalleon = 17<シルバーシックル/ゴールドガレオン>
knutsPerSickle と sicklesPerGalleonは変換要素です。 これらは、値の操作を実行するときに並べ替えデータを射影するために不可欠です。 種類の料金を追加しようとすると
int
、または種類の料金を分割する int
に knutsPerSickle を実行し、関連付けられた料金を int を期待する機能に渡します
金銭的な部分を比較するためにグループに属する特徴を概説することができます:
let
cashAsKnuts お金 =let
鎌
=(分オニー.
ガレオン船
* シックルガレオン ) + お金
.
鎌 (鎌 * knutsPerSickle
)
+ お金
.
クヌーツ
大学への登録
登録済みの 学生 と 学費のフォームの概要を説明できます。
10 個のブロンズ クナットとして:
種類 学生 = { 名前: 文字列 年齢
:
int Money
: お金 住居
:
住居 } させて 学校の授業料 =10
<ブロンズクヌート>
費用を私費で賄える大学生なら登録できます。 私たちのモデルでは、Unsorted -> Student という変換があります。
unsorted
を入力し、Student オプション を返します。 これは、生徒が費用の資金を私有できる場合は Some Student を返し、
None を返します。 なくなったら
させて 学生登録 (未分類: 未分類)
=let 支払い可能です =キャッシュアナッツ
未分類
。お金> 学校の授業料 もし もう
支払い可能です
それから なし その他 一部
{
名前=未分類 。名前 年 =未分類
.
年齢
住居
=
並べ替え
並べ替えなし お金= { 未分類
.
お金 で クヌーツ =未分類 .
お金。クヌーツ - 学校の授業料
}
}
登録済みのStudent
には
Name
と
分類されていない
年齢
伝記。
Money 回顧録は Knuts とともにコピーされます。 マイナス 学費.
敷地内での遊び
生徒が登録され、Dogshorts academy の住民になります。 他の形態の住人は、先生
と
ゴーストで構成されていますs:
親切
先生
=
{
名前: 弦 年:
int
お金: お金 } 親切 おばけ={ 名前: 弦 住居: 住居 )オプション }
学者は契約上、いかなる家の必要性も私的ではなく開発することを義務付けられていますが、年齢
と
お金の必要性
)。 幽霊は、彼らがそれを持っていた場合に、使い古されたマンションに戻ることができます.
種類
先生 の 先生 | 学生 の 生徒ドッグショーツ住民= |
|ゴースト の おばけ
A DogshortsInhaitant は
教師
、 学生
または
ゴースト
。 居住者を定義することで、大学の原則のいくつかを成文化することができます。 学者は森をパトロールすることができ、幽霊の通過を妨げようとする人は誰もいません。 大学生は、16 歳の誕生日まで自己規律に入ることはできなくなりました。
このルールを特徴として成文化することができます:
させて
=マッチ 住人 と森に入ることができます住人
|教師 _ -> 倫理的
| ゴースト
_
-> 倫理的
| 学生 -> s 。年>
15
先生とゴーストが帰ってきた エシカル 森に入るのが人気だから。 生徒
は変数
s
に当てはまります*) 生徒の Age の場合は ethical を返します is over 15.
canEnterTheWoods は単一のパラメーター inhabinant を返し、bool を返します
コンパイラは、識別子が一致する判別共用体を検索します。 ドッグショーツの住人
が
先生に似合うまたは
学生
または
幽霊
ということで、具体的な種類はこちら
ラメンターズ法
大学の学期の途中で、ラメンターズが戻ってきます。 . ラメンターは、名前も年齢もない珍しい集団であり、超自然的な不平のスキルを持つ純粋な存在です。 彼らの到着には、DogshortsInhabinant
:
親切 DogshortsInhabitant=| 教師 の 先生|
学生
の
学生 | ゴースト の おばけ | ラメンター
DogshortsInhabitant 内の識別子の追加 種類には、握りやすい発明があります。
canEnterTheWoods の一致式にケースが欠落しており、関連する料金 ラメンター
。
F#は
ストーリー コースでは、最小限のボイラープレート コードを使用してデータ構造の概要を説明します。 それらは不変であるため、アプリケーション エクスプレスについての推論がより単純になります。
測定単位は、特定の形式のバグを先延ばしにする可能性のある数値の入力レイヤーを提供します。 他の言語では、数値の種類をラップすることで、この種類のセキュリティを停止できます。 この方法には、何百ものボイラープレート コードと機能のパフォーマンス オーバーヘッドが伴います。
Discriminated Unions は、直感的なフォームを Web 描画にマッピングするための野心的なツールです。 彼らはおそらく、違法なプログラムの状態を表現不可能にすることで、コードの正確性をさらに高めることができた. これらのフォームのパターン マッチングにより、環境調整の結果を検出できます。 ここのインスタンスは、Lamenter を
DogshortsInhabitant
に追加したものです。 コンパイラの警告が発生しました。
この公開では、導入されたアイデアを簡単に垣間見ることができます。 さらに広範な調査については、
に助言します。 𝚆𝚊𝚝𝚌𝚑 𝙽𝙾𝚆 📺