ユーザー定義関数を作ってみた。[Ruby][プログラミング]

 少し前から、wordpress上でプログラミングコードを表記するためのプラグイン「Highlighting Code Block」を導入しています。

「Highlighting Code Block」のエリア内では書いたコードがそのまま表示されることから、wordpressのシステムによって一部の文字や記号が自動的に変換される問題を回避できるようになります。さらにコードを色分けして表示してくれることで見やすくできます。

 プログラミングの学習の方ですが、ようやくユーザー定義関数(ユーザー定義メソッド)に取りかかってます。

 ユーザー定義関数とは、一連の処理を前もって文中に記載しておくことで、いつでも好きなときに呼び出して処理できるようにするものです。

 ユーザーが頻繁に使う処理で、それぞれの言語の組み込み関数(メソッド)に実装されていないものついては、ユーザー定義関数として予め定義して保存しておくことで、今後はいつでも取り出して利用できるようになります。さらに、一連の処理ごとにブロック化することで、コードを読みやすくできます。

 ユーザー定義関数に慣れるために、いくつかの処理を定義してみました。

文字列が全て同じ文字で構成されているか?

 文字列の最初の文字の個数が、文字列の長さに一致すれば、その文字列は同じ文字で構成されていることになります。

#文字列の中身が全て同じか?
def same_str(str_x)
    if str_x.count(str_x[0,1]) == str_x.length
        return true
    else
        return false
    end
end

 引数は文字列str_x。文字列str_xが全て同じ文字で構成されていればtrue、そうでない場合はfalseを返します。

 引数を配列にするとともに、配列[0]の要素の数が配列の要素数に一致するかどうか判定するように改造することで、配列の中身が全て同じかどうか判定する処理にできます。

2次方程式の実数解を返す。

 2次方程式の解を求めるプログラムについては、以前Javascriptで書いたことがあります。

 今回は2次方程式の実数解を求めて返す処理を、Rubyのユーザー定義メソッドにしてみました。

#2次方程式の実数解を配列で返す処理
def quadratic(a,b,c)
    d = b ** 2 - 4 * a * c
    if d > 0
        x1 = ((-b + Math.sqrt(d)) / (a * 2)).round(2)
        x2 = ((-b - Math.sqrt(d)) / (a * 2)).round(2)
        result = [x1,x2]
        return result
    elsif d == 0
        x1 = ((-b) / (a * 2)).round(2) 
        result = [x1]
        return result
    else
        return "実数解はありません。"
    end
end

 二次方程式、ax^2 + bx + c = 0の実数解を返す関数です。

 判別式d = 4 * a * cが、正か0か負で、実数解の存在を判定します。
 実数解が存在する場合は、小数点以下第2位まで四捨五入して値を配列で返します。実数解が存在しない場合は、「実数解はありません。」と表示されます。

文字列からランダムに1文字を取り出す。

 渡された文字列の中からランダムに1文字を選んで返す処理です。

#文字列の中からランダムで1文字選んで返す。
def rnd_str(str_x)
    r = rand(str_x.length).to_i
    return str_x[r,1]
end

 引数は、文字列str_x。ランダムで文字列のr+1番目の文字1文字を選んで返します。

 文字列の中からランダムで1文字選ぶ処理を応用することで、スロットマシンの処理にも使えます。
 スロットマシンのリールの絵柄情報を文字列にして入力し、それぞれのリールからランダムに1つづつ文字を選びます。そして、選び出された文字が一致するかどうかで、当たり外れを判定します。

文字列中の単語とその個数の組み合わせを連想配列にして返す

 渡された文字列中の単語を単語別にカウントし、単語とその個数の組み合わせを格納した連想配列を返す処理です。

def word_count(arr_x)
    hash = {}
    for i in 0..arr_x.uniq.length-1
        hash[arr_x.uniq[i]] = arr_x.count(arr_x.uniq[i])
    end
    return hash
end

 ここで文字列として、「str = cherry apple apple pine cherry orange grape pear pine」の場合、

word_count(str).each {|k,v| puts"#{k}:#{v}"}

の処理を行うことで、次のように単語とその個数を表示できます。

cherry:2
apple:2
pine:2
orange:1
grape:1
pear:1

 こんな感じで、Rubyでいくつかユーザー定義関数を作ってみました。Rubyだけでなく、Javascriptの方でもユーザー定義関数を書けるようにしておきたいです。

にほんブログ村 ゲームブログへ

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする