3
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?

More than 5 years have passed since last update.

rubysolo/dentakuの使い方

Posted at

rubysolo/dentakuを使うことにより、安全に数学的および論理的な式を評価することが出来ます

#使い方

##シンプルな評価

calculator = Dentaku::Calculator.new
calculator.evaluate('1 + 1')
#=> 2

##変数の参照

calculator.evaluate('hoge + 1', hoge: 1)
#=> 2 

#複数変数を宣言する場合
calculator.evaluate('hoge + huga + piyo', hoge: 1, huga: 2, piyo: 3)
#=> 6

変数の値をメモリに保存してから、それらの保存された値に対して式を評価することもできます
calculator.store(one: 1)
calculator.evaluate('one + 1')
#=> 2

##例外処理
evaluateが評価する式にエラーがある場合、evaluatenilを返します。
例外をそのまま返したい場合はevaluate!を使用します

calculator.store(one: 1)
calculator.evaluate('aaa  + 1')
#=> nil

calculator.evaluate!('aaa + 1')
#=> UnboundVariableError: no value provided for variables: aaa

##組み込み関数
dentakuにはあらかじめ式の評価に使える関数がいくつか備わっています。

Math: +, -, *, /, %, ^, |, &
Also, all functions from Ruby's Math module, including SIN, COS, TAN, etc.
Comparison: <, >, <=, >=, <>, !=, =,
Logic: IF, AND, OR, NOT, SWITCH
Numeric: MIN, MAX, SUM, AVG, COUNT, ROUND, ROUNDDOWN, ROUNDUP
Selections: CASE
String: LEFT, RIGHT, MID, LEN, FIND, SUBSTITUTE, CONCAT, CONTAINS


###if
if文はif(条件式, 真, 偽)のように使用できます

calculator.evaluate('if(hoge >= 1, hoge + 1, -1)', hoge: 1)
#=> 2
calculator.evaluate('if(hoge >= 1, hoge + 1, -1)', hoge: 0)
#=> -1

###switch switch文は`switch(変数, 条件1, 返り値1, 条件2, 返り値2..., else返り値)`のように書けます
calculator.evaluate('switch(hoge, 0, 1+1, 1, 2+2, -1)', hoge: 0)
#=> 2
calculator.evaluate('switch(hoge, 0, 1+1, 1, 2+2, -1)', hoge: 1)
#=> 4
calculator.evaluate('switch(hoge, 0, 1+1, 1, 2+2, -1)', hoge: 2)
#=> -1

rubyでいうところのこんな感じです

 case hoge
   when 0
     1+1
   when 1
     2+2
   else
     -1
 end

##自作関数
dentakuでは組み込まれている関数以外にも自身で関数を定義できます
定義にはadd_functionを使用します
add_function(:関数名, :返り値の型, ->(引数1, 引数2, ...) { 処理 })

#階乗の関数定義
calculator.add_function(:pow, :numeric, ->(mantissa, exponent) { mantissa ** exponent })
calculator.evaluate(pow(2, 2))
#=> 4

##コメントの挿入

calculator.evaluate('hoge + 1 /* This is a comment */', hoge: 2)
3
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
3
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?