Я видел множество способов использования булевых значений в файлах INI:
-
variable = true
-
variable = 1
-
variable = on
-
variable = yes
Каков самый канонический, общий и/или предпочтительный способ?
Я видел множество способов использования булевых значений в файлах INI:
variable = true
variable = 1
variable = on
variable = yes
Каков самый канонический, общий и/или предпочтительный способ?
Нет никаких спецификаций для файлов INI, но для того, что стоит, я расскажу о поведении нескольких реализаций на языках, которые я знаю.
Встроенный модуль configparser
Python предлагает 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, не предлагает никакой поддержки для автоматического анализа значений и возвращает их все строки. Его Приступая к работе примеры показывают разбор булевых файлов с помощью .NET Boolean.Parse
, который примет строки "true"
и "false"
(с любой капитализацией) и выдаст исключение, если дано что-то еще.
Вкратце: нет абсолютно никакой согласованности в этом вопросе между различными реализациями парсеров INI.
Я бы порекомендовал:
1
и 0
.Это зависит от анализатора ini файла. Значения всегда являются строками.
true/false: в С# я могу напрямую преобразовать true и false строки в bool. Равно читаемость и простота преобразования. меньше кода.
0/1: мне нужно преобразовать строки 0 и 1 в int перед преобразованием в bool. Меньший размер файла ini. Менее читаемо. больше кода.
yes/no и on/off Мне пришлось бы использовать оператор if/switch. удобочитаемый. больше кода.
Мой предпочтительный путь - true/false. Сериализация объекта в true/false, вы можете использовать true/false с типом бит sql, даже если он хранится как 0/1. Таким образом, единственная нижняя сторона будет размером, который может быть незначительным в большинстве контекстов.