Unknown Region

プログラムでハマったエラーとその解決方法についての備忘録メモ

【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]になる)

個人的には用途に応じて要求される振る舞いが変わると思っているので、使おうとするときに随時考える必要がある気がする。

 

連絡先: plugout777★yahoo.co.jp (クローラー対策のため★を@に変更してください)