【Lua】tobooleanを実装する
Luaには[tonumber]という値を数値に変換してくれる関数や[tostring]という値を文字列に変換してくれる関数がデフォルトで存在する
しかし[toboolean]の様な、値を[boolean]に変換してくれる関数はデフォルトでは存在しない。
[boolean]という真偽値を表す型が存在するにも関わらずだ。
(ちなみLuaでは[booleanのfalse]と[nil]が偽として扱われ、それ以外の値は全て真となる)
無いならば作るしかない。
ということで、以下の様なコードを作成した。
例: demo.lua
#!/usr/local/bin/lua function toboolean(value) if tostring(value) == 'true' then -- 文字列に変換し、文字列がtrueと一致した場合だけtrueとみなす return true end if tostring(value) == 'false' then -- 文字列に変換し、文字列がfalseと一致した場合だけfalseとみなす return false end return nil -- 変換できない場合はnil end print(toboolean("true")) -- true print(toboolean("false")) -- false print(toboolean("hoge")) -- nil print(toboolean(0)) -- nil print(toboolean(1)) -- nil print(toboolean(nil)) -- nil
ちなみに実行結果は以下の通り。
実行結果:
$lua /demo.lua true false nil nil nil nil
上記のコードには以下の改良の余地がある。
- 値がbooleanに変換できなかった場合(このコードでは全て[nil]になる)にデフォルト値を渡せる様にするべきか
- 渡せる値を文字列に制限するべきか(何らかの値をtostring()に渡したときの挙動によって偶然[true]や[false]に一致することは無いか)
- 数値の1と0はbooleanに変換しなくて良いのか(上記コードではどちらも[nil]になる)
個人的には用途に応じて要求される振る舞いが変わると思っているので、使おうとするときに随時考える必要がある気がする。