C# 6 と VB 12 はパターン マッチングを追加しようとしています
関数型プログラミング言語に由来するもう 1 つの概念が C# と VB 陣営に加わりました。それはパターン マッチングと呼ばれる機能です。一見すると、パターン マッチングは switch/select ステートメント ブロックのように機能しますが、その機能ははるかに強力です。
注: VB バージョンの仕様はまだ完成していないため、これらの例は主に C# のパターン マッチング仕様からのものです。
is or Matches 演算子
.NET でのパターン マッチングは、主に「is/Matches」演算子を通じてサポートされています。このあまり馴染みのない演算子は、クラスをそのコンポーネント部分に分割します。次の例は、火曜日のニュース レポートで言及されているデカルト レコード クラス http://www.infoq.com/news/2014/08/Record-Class (レコード クラス) に基づいています。
public static bool operator is(Cartesian c, out double x, out double y) x = c.X; y = c.Y; return true; }
is 演算子は、その定義クラスでの使用に限定されず、別の方法で演算子を定義し、デカルト オブジェクトを分解して極オブジェクトと一致させることができます。
public static class Polar { public static bool operator is( Cartesian c, out double R, out double Theta) { R = Math.Sqrt(c.X*c.X + c.Y*c.Y); Theta = Math.Atan2(c.Y, c.X); return c.X != 0 || c.Y != 0; } } var c = Cartesian(3, 4); if (c is Polar(var R, *)) Console.WriteLine(R);
型パターン
最も単純なパターンは型パターンです。これは基本的に型変換を実行し、それを同時に変数に代入しようとします。以下にそのようなパターンの例を示します:
if (expr is Type v) { // code using v }
再帰パターン
ほとんどのパターンは再帰パターンとして表示されます。これは、パターンがより単純なパターンで構成されていることを意味します。このパターンの例を見てください:
var a = new Location(1, 2, 3); //x=1, y=2, z=3 if (a is Location(1, var y, *))
この再帰パターンには、定数パターン、var パターン、およびワイルドカード パターンが含まれています。
定数モード
このモードでは、属性を定数値と照合できます。定数照合では、object.Equals(left, right) メソッドを使用して、2 つが一致するかどうかを判断します。
Var pattern
Var パターンは確実に一致します。このパターンに対応する変数には、is 演算子を呼び出したときに指定された値が割り当てられ、変数の型は静的型によって決まります。
ワイルドカード パターン
ワイルドカード パターンは本質的には var 式ですが、一致結果を気にする必要はありません。
内部実装
このロケーション クラスの例について説明を続けましょう。コンパイラはコンパイル フェーズ中に次の手順を実行します:
変数 $x、$y、$z を作成する
Call Location.is( a , out $x, out $y, out $z) メソッドを実行し、返された結果が true であることを確認します
Constant モード: object.Equals($x, 1) call
Var モード: assign $y to y
ワイルドカードパターン: $z 変数を無視
Switch/Select Case ステートメントブロック
Switch ステートメントブロックの機能が拡張され、パターンマッチング機能が使用できるようになります。これが実際に意味するのは、次のようにステートメントを記述できるということです:
case null: case String s case Location(1, var y, *):
限制
在目前的规格草稿中,还没有对于范围检查的支持。这意味着你不能编写类似于“a is Location( > 0, 1 to 5, <= 10)”这样的代码。此外目前也不支持在一个列表或迭代器中进行元素匹配。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









c言語のシンボルの使用方法は、算術、割り当て、条件、ロジック、ビット演算子などをカバーします。算術演算子は基本的な数学的操作に使用されます。割り当てと追加、下位、乗算、除算の割り当てには、条件操作に使用されます。ポインター、ファイル終了マーカー、および非数値値。

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。

Char Arrayは文字シーケンスをC言語で保存し、char array_name [size]として宣言されます。アクセス要素はサブスクリプト演算子に渡され、要素は文字列のエンドポイントを表すnullターミネーター「\ 0」で終了します。 C言語は、strlen()、strcpy()、strcat()、strcmp()など、さまざまな文字列操作関数を提供します。

Cでは、文字列でCharタイプが使用されます。1。単一の文字を保存します。 2。配列を使用して文字列を表し、ヌルターミネーターで終了します。 3。文字列操作関数を介して動作します。 4.キーボードから文字列を読み取りまたは出力します。

C言語では、以下などのエスケープシーケンスを通じて特殊文字が処理されます。\ nはラインブレークを表します。 \ tはタブ文字を意味します。 ESACEシーケンスまたは文字定数を使用して、Char C = '\ n'などの特殊文字を表します。バックスラッシュは2回逃げる必要があることに注意してください。さまざまなプラットフォームとコンパイラが異なるエスケープシーケンスを持っている場合があります。ドキュメントを参照してください。

C言語では、charタイプの変換は、キャスト:キャスト文字を使用することにより、別のタイプに直接変換できます。自動タイプ変換:あるタイプのデータが別のタイプの値に対応できる場合、コンパイラは自動的に変換します。

C言語に組み込みの合計機能はないため、自分で書く必要があります。合計は、配列を通過して要素を蓄積することで達成できます。ループバージョン:合計は、ループとアレイの長さを使用して計算されます。ポインターバージョン:ポインターを使用してアレイ要素を指し示し、効率的な合計が自己概要ポインターを通じて達成されます。アレイバージョンを動的に割り当てます:[アレイ]を動的に割り当ててメモリを自分で管理し、メモリの漏れを防ぐために割り当てられたメモリが解放されます。

C言語では、charとwchar_tの主な違いは文字エンコードです。CharはASCIIを使用するか、ASCIIを拡張し、WCHAR_TはUnicodeを使用します。 Charは1〜2バイトを占め、WCHAR_Tは2〜4バイトを占有します。 charは英語のテキストに適しており、wchar_tは多言語テキストに適しています。 CHARは広くサポートされており、WCHAR_TはコンパイラとオペレーティングシステムがUnicodeをサポートするかどうかに依存します。 CHARの文字範囲は限られており、WCHAR_Tの文字範囲が大きく、特別な機能が算術演算に使用されます。
