もはや、PHP,Pythonのコードを書いたらRubyも書かないと気が済まなくなってきたので、一心不乱で書いてみました。
ruby言語はプログラム言語として非常に人気が高いという理由は、自分で書いてみて初めてわかりました。
いくつかのWEBプログラム言語を触ってきて気が付いたんですが、PythonとRubyは、まあまあ似た傾向があり、
PHPとjavascriptはC言語系の流れを受け継いでいるように思えました。
rubyがきちんとend記述をするのに対してpythonは、インデントをネストとして扱う為、僕は個人的にpython言語に気持ち悪さがありました。
これはPHPやjavascriptのswitch文を書いている時も同じ気持ちです。
きちんとendで閉じているrubyは、きちんと閉じタグの存在するxmlがhtmlのimgタグやmetaタグなどに気持ち悪さを感じた人が作り出したのではないかと、勝手に考えてしまいました。
そんなこんなで、今回はrubyを使って「シーザー暗号」を扱いますが、pythonからのローカライズでまあまあ楽に完成してしまいました。
ソースコード
# encoding: utf-8
require 'uri'
class Caesar
def encode(val , key)
strs = URI.escape(val)
result = ""
for i in 0..strs.length-1 do
result += (strs[i].ord + key).chr
end
return result
end
def decode(val , key)
result = ""
for i in 0..val.length-1 do
result += (val[i].ord - key).chr
end
return URI.unescape(result)
end
end
# test
str = "あいうえおabcdefg"
caesar = Caesar.new()
enc = caesar.encode(str , 3);
puts enc
dec = caesar.decode(enc , 3);
puts dec
## point
## "no implicit conversion of Fixnum into String (TypeError)"エラーが出る時
##
簡単解説
今回は、オブジェクト指向を意識して、class構造で書いてみました。
冒頭の"require 'uri'"は、url文字エンコードを行うために読み込むライブラリです。
URI.escape(val)
という箇所で使ってます。
stringのキャラクターコードは、ord、
キャラクターコードを文字列に戻すのは、chr、
これはどの言語も似たような感じですね。(若干の違いはありますが、こうしたstringの扱いは言語として準備されているようです)
とりあえず、主要言語間でも、シーザー暗号のやりとりができるようになったので、いよいよ現実に使える見通しとなりました。
使うか使わないかはあなた次第。
0 件のコメント:
コメントを投稿