0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

環境

Ruby 2.6

はじめに

SIerで長らくエンジニアをしていた自分は、もっぱらVBer(造語)でした。多くのVBerを悩ませた問題の一つにnull問題がありす。nullはOracleにもSQLServerにも存在する概念です。業務アプリを開発する現場では避けて通ることはできません。とにかくこのnullですが、便利などころか厄介モノ扱いでした。VBerから離れてRubyerになった現在でも、null問題はついて回ります。nullという概念はPostgreSQLにもMySQLにも同じように存在します。Rubyでnull(正確にはnil)をスマートに扱う方法について書いてみました。

VBでnullを扱う

VBでnullを扱う場合、nullを""に変換する関数を作成して対応していました。型をVariantにしているのは、どのような型にもオールマイティに対応するためです。もちろん、nullにも対応させる必要があります。Variant型にすると処理が重くなるといった副作用が発生しますが、いたしかたありません。また、Trimをかけて、空白スペースが入っていた場合は""に変換しています。このような関数を作成して各項目に対応していました。

Public Function NullPadS(vData As Variant) As String

    If IsNull(vData) = True Then
        NullPadS = ""
    Else
        NullPadS = Trim$(vData)
    End If
    
End Function

Rubyでnullを扱う

Rubyでnullを""に変換するメソッドを作ると次のようになります。VBよりも随分とシンプルなコーディングになりました。if文がワンライナーで書けるといった利点もあります。

def test_nil(data)
    data.nil? ? "" : data.to_s.strip
end

実は、Rubyの場合、メソッドを作成しなくても、変数に下記を付けただけでも対応ができるようになります。null.to_sをすれば、""になってくれます。100.to_sは、"100"になってくれます。これで、変換用のメソッドを作成する必要はありません。

data.to_s.strip

動作確認

puts nil.to_s.strip			>= ""
puts "".to_s.strip			>= ""
puts "  ".to_s.strip		>= ""
puts 11.to_s.strip			>= "11"
puts "aa".to_s.strip		>= "aa"
puts " bb ".to_s.strip		>= "bb"
puts " 22 ".to_s.strip		>= "22"
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?