web-dev-qa-db-ja.com

INI構成ファイルにブール値を設定するにはどうすればよいですか?

INIファイルでブール値を設定するために使用されるさまざまな方法を見てきました:

  • variable = true
  • variable = 1
  • variable = on
  • variable = yes

最も標準的、一般的、および/または好ましい方法はどれですか?

23
Anirvan

INIファイルの仕様はありませんが、価値があるものは何でも、私が知っている言語からのいくつかの実装の動作をリストします。

Pythonの組み込みconfigparserモジュールは、次のように動作する getboolean を提供します。

受け入れられる値...は'1''yes''true'、および'on'であり、このメソッドはTrueを返し、'0''no''false'、および'off'は、Falseを返します。

一方、PHPの parse_init_file では:

文字列値 "true" "on"および "yes"[〜#〜] true [〜#〜]に変換されます。 "false" "off" "no"および "none"は考慮されます[〜#〜] false [〜#〜]

一方、.NETにはINI解析の組み込みサポートはありませんが、最も人気のあるINI解析ライブラリ ini-parser は、自動解析をまったくサポートしていません。その Getting Started の例は、.NETの Boolean.Parse を使用したブール値の解析を示しています。文字列"true"および"false"(大文字を使用)および他に指定された場合は例外をスローします。

要約すると、INIパーサーの異なる実装間で、この質問に一貫性はまったくありません。

私がお勧めします:

  • 単一のパーサーを使用してINIを解析するだけの場合は、そのパーサーがどのように動作するかを確認し、特定の実装に合わせてINIを作成します。
  • 広範囲のパーサーをサポートする必要がある場合(たとえば、言語の相互運用性のため)、INIを形式として完全に放棄するか、または一部の魔法のブール値の使用を完全に回避します。パーサーは理解し、代わりに10に固執します。
12
Mark Amery

これは、iniファイルのパーサーによって異なります。値は常に文字列です。

true/false:C#では、trueとfalseの文字列を直接boolに変換できます。読みやすさと簡単な変換に匹敵します。より少ないコード。

/1:boolに変換する前に、文字列0と1をintに変換する必要があります。小さいiniファイルサイズ。読みにくい。より多くのコード。

yes/noおよびon/off if/switchステートメントを使用する必要があります。読み取り可能。より多くのコード。

私の好ましい方法はtrue/falseです。オブジェクトはtrue/falseにシリアル化されます。これは、0/1として格納されている場合でも、sqlビットタイプでtrue/falseを使用できます。したがって、唯一の欠点はサイズであり、ほとんどの状況でマイナーになる可能性があります。

5
Valamas