Posted at

20150513 Ruby講義memo

More than 3 years have passed since last update.


20150513 Ruby講義


紹介

ruby -v 2.0.0p645 (2015-04-13) [i386-mingw32]

terapad

文字コードを指定してできるので選んでいる。

Rubyはプログラマが書きやすいのを目指している言語

るりま

http://docs.ruby-lang.org/ja/

http://docs.ruby-lang.org/ja/2.0.0/doc/index.html

インタプリタ

Rubyはインタプリタ言語ですので プログラムを実行するためにコンパイルする必要はありません。

変数に型が無い (動的型付け)

Rubyの変数はどのような型のデータも格納する事ができますので、 変数の型について心配する必要はありません。 半面、コンパイル時のチェックは弱くなります。

反面バグを見つけにくい


install

windows installer

mac

ports

brew rubyで書いているので楽

linux

apt

debian 向け

red hat系

cent os

rpm

rbenvもあるよ

rubyをbuild する場合、

依存するパッケージを入れておかないと

https://github.com/sstephenson/ruby-build/wiki


editor

sublime

補完機能があったりする。

私はvimをつかってるんですが


gem

ローカルだけ探した場合



gem search -l pry


bundler

gemをまとめて扱うことのデフォルト。ほぼこれ経由で使う。


irb, pry

pry便利

色付けしてくれる

CTRL+r コマンド検索してくれる


print method

"", ''

''は特殊文字どれも展開しない


Ruby コーディング規準

Ruby コーディング規準 cookpad

https://github.com/cookpad/styleguide/blob/master/ruby.ja.md

github

https://github.com/styleguide/ruby

前田さんの

to_s, inspect はより人間への説明的。開発者向け、pメソッド向け


日本語の扱い

shift-jis で保存すると大変。

UTF-8N のほうであるべき。

http://www.solidpanda.com/book/article/944/

BOMなしが一般的

# encoding: Shift-JIS

を1行目に書くのが重要

sheban

実行ファイル指定

これがあるときはしょうがないので encoing は2行目に。

ここが一番簡単

Ruby M17N の設計と実装

http://magazine.rubyist.net/?0025-Ruby19_m17n


数字

2/3 は整数演算扱い

to_X は慣用的な名前

methods(false)

で当該クラスで追加したメソッドのみ表示できる


変数

マジックナンバーだめです

複数形には s とつけてやりましょう

変数名は説明的になるべく省略せずにしたほうがいい


コメント

1行ごとでなく、ブロックごとでまとめて説明したほうがいい。

rdoc

http://ruby.gfd-dennou.org/tutorial/rdoc/


制御構造

例外とはなにか? どう説明したらいいかな、、、

コマンドプロンプト コマンド入力の途中でTABを押したら補完してくれるよ

if で戻り値を書ける


calc.rb

a = 9

res =
if(a >= 10)
"bigger"
else
"smaller"
end

条件演算子  cond ? a : b


loop

while はそんなには使わないかな。

times

pry 上で日本語打つと文字化けするな、irb上では大丈夫だな

chcp 65001

hash

symbolだと省メモリにつながる


正規表現

大文字小文字関係なしに比較

/Ruby/i =~ "RUBY"


argv.rb

puts "最初の引数:#{ARGV[0]}"

ARGV.each.with_index(1) do |arg, i|
puts "#{i}番目: #{arg}"
end

each.with_index(1)

が便利。


read_file.rb

filename = ARGV[0]

reg_pattern = Regexp.new(ARGV[1])

file = File.open(filename)
file.each_line.with_index(1) do |line, i|
if reg_pattern =~ line
print "#{i}:#{line}"
end
end

file.close


るりまサーチ

require_relative: 実ファイル位置から相対パスを見つけてくれる

require: 実行したフォルダから探す

グローバル変数は変更箇所が特定できないため、使いづらく、

あまり使わないほうがよい。


多重代入がまだ認識できていない

変数を入れ替える

a, b = b, a

るびまいいので見ましょう

http://magazine.rubyist.net/