LoginSignup
3
0

More than 3 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