[C#] ラムダ式

ラムダ式 (lambda expression)

  • 匿名メソッドを2.0の頃の記法より簡単に書ける。
  • 匿名メソッドと同じ記法で式木(expression tree)を作れる。

匿名メソッドの記法の簡略化

匿名メソッド (C# 2.0)

ラムダ式 (C# 3.0)

{}の中身が単文の場合は{}とreturnも省略できる。

式木

割愛

参考サイト

ラムダ式 – C# によるプログラミング入門 | ++C++; // 未確認飛行 C
https://ufcpp.net/study/csharp/sp3_lambda.html

式木(Expression Trees) – C# によるプログラミング入門 | ++C++; // 未確認飛行 C
https://ufcpp.net/study/csharp/sp3_expression.html

[Ansible] get_urlモジュール

機能

HTTP、HTTPS、FTPからリモートサーバーへファイルをダウンロードする。リモートサーバーがリモートリソースへ直接アクセスできることが前提。

使用例

参考サイト

ansible.builtin.get_url module – Downloads files from HTTP, HTTPS, or FTP to node — Ansible Documentation
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/get_url_module.html

[C#] デリゲート

デリゲート(delegate)とは

メソッドを参照するための型

デリゲート型の定義

delegate 戻り値の型 デリゲート型名(引数リスト);

デリゲート例(C# 1.1)

デリゲート例(C# 2.0)

デリゲートの機能

  • インスタンスメソッドの代入 – クラス(static)メソッドとインスタンス(非static)メソッドのどちらでも代入可
  • 複数のメソッドを代入 (+=演算子を使用) – マルチキャストデリゲート
  • 非同期呼び出し

参考サイト

デリゲート – C# によるプログラミング入門 | ++C++; // 未確認飛行 C
https://ufcpp.net/study/csharp/sp_delegate.html

[C#] 拡張メソッド

既存のクラスやインターフェースに対してインスタンスメソッドを追加する。PHPのtraitのように使えるかも。

参考サイト

C# 3.0 の新機能 – C# によるプログラミング入門 | ++C++; // 未確認飛行 C
https://ufcpp.net/study/csharp/ap_ver3.html

[Ansible] assertモジュール

機能

与えられた式が真であることを、オプションのカスタムメッセージで表示する。thatパラメータにwhenステートメントに渡すのと同様の文字列リストを指定する。

使用例

参考サイト

ansible.builtin.assert module – Asserts given expressions are true — Ansible Documentation
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/assert_module.html

[C#] デバッグ時にのみ実行したいメソッドを定義する

条件属性(Conditional属性)を使う方法

次のようにメソッドにConditional(“DEBUG”)属性を付ければよい。

条件付きコンパイル・ディレクティブ(#ifディレクティブ)を使う方法

#if DEBUG~#endifディレクティブにより、デバッグ時にのみ実行したいコードを囲えばよい。

参考サイト

テスト用コードをデバッグ時にのみ実行するには?:.NET TIPS – @IT
https://atmarkit.itmedia.co.jp/ait/articles/0501/07/news097.html

[Ansible] 変数を評価してタスクを実行する

一連の手順をプレイブックに記述しておいて、条件に応じて一部の手順をスキップするようなことをやりたい場合に変数を使うのが良さそう。

参考サイト

Ansible: Playbookの実行条件制御 when の使い方(1) | tacckの積み重ねるブログ
https://blog.tacck.net/archives/101

[C#] null許容型

null許容型

C# 2.0: 実装
C# 8.0: null許容参照型

宣言と初期化

値を持つかどうかはHasValueプロパティで判断できる

??演算子 (null coalescing operator)

??=演算子

参考サイト

null許容値型(Nullable<T> 型) – C# によるプログラミング入門 | ++C++; // 未確認飛行 C
https://ufcpp.net/study/csharp/sp2_nullable.html

[Ansible] 変数による条件付き実行

登録された変数に基づく条件

プレイブックでは、以前のタスクの結果に基づいてタスクを実行したり、スキップしたりしたいことがある。例えば、以前のタスクによってアップグレードされた後にサービスを設定したい場合など。登録された変数に基づいた条件を適用したい場合には以下のようにする。

  1. 先のタスクの結果を変数として登録する
  2. 登録した変数に基づいて条件テストを行う

変数の登録はregisterキーワードを使って行う。登録された変数には、それを作成したタスクのステータスと、そのタスクが生成した出力が含まれる。登録された変数は、テンプレートとアクションライン、および条件付きwhenステートメントで使うことができる。variable.stdoutを使うと、登録された変数の中身の文字列にアクセスすることができる。以下に例を示す。

変数がリストの場合、タスクのループ内で登録された結果を使うことができる。リストでない場合は、stdout_linesまたはvariable.stdout.split()を使ってリストに変更することができる。また、他のフィールドによりラインを分割することもできる。

登録された変数の中身の文字列が空の場合もある。登録された変数のstdoutが空であるホストでのみ他のタスクを実行したい場合は、登録された変数の中身の文字列が空かどうかを確認する。

タスクが失敗したホストや、条件を満足せずにタスクがスキップされたホストであっても、Ansibleは常に全てのホストの登録変数に何かを登録する。これらのホストでフォローアップタスクを実行するには、スキップされたホストに関して登録された変数を照会する(“undefined”や”default”に対しては行わない)。

以下に、タスクの成功/失敗に基づく条件例を示す。失敗した場合でもAnsibleをホストで実行させ続けたい場合にはエラーを無視する必要がある。

参考サイト

Conditionals — Ansible Documentation
https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html#the-when-statement

[C#] 匿名メソッド式

匿名メソッド式 (anonymous method expression)

C# 2.0: 実装
C# 3.0: ラムダ式

匿名メソッド式を使わない場合

匿名メソッド式を使う場合

参考サイト

C# 2.0 の新機能 – C# によるプログラミング入門 | ++C++; // 未確認飛行 C
https://ufcpp.net/study/csharp/ap_ver2.html#anonymous