Rubyエンジニアが
pythonをdisるために
pythonを勉強してみた
@kon_yu
2015.10.24 PyLadies Tokyo - 一周年記念パーティ
のみなさんはじめまして
どうも
です
Who am I
• オンライン英会話サービス CTO
• フリーランスエンジニア
• Railsでサービス開発、実はRails使っている人エン
ジニア募集中です
• 趣味でルンバをRubyで制御したりしているひと
きっかけ
Railsプロジェクトのテンプレートエンジンにslim
を適用したら存外良かった
例
.layout__lesson--right
.buttons--downloads
.buttons__left.tooltip-item
= pdf_download_btn
これがHTMLになる
インデントでブロックを制御しているのええやんけ
これって何かに似てない?
 そうだねPythonだね
基本構文やライブラリで
RubyとPythonを比較して(disって)みよう
こういう新しいことを勉強するときはドットインストールって便利ですね
REPL起動終了
Ruby
> pryやirbで起動
Cntrl-Cで抜ける

exitでも抜ける
Python
> python
Cntrl-Dで抜ける

exit()でも抜ける
exit() <- の括弧

括弧書くのだだるい
変数
Ruby
ruby_val = "hello ruby"
Python
python_val = "hi python"
スネークケースで変数を書くのが一般的なのも同じ
代表的なデータセット
Ruby
Array

Set

Hash
Python
List -> RubyのArrayと大体一緒

Set -> RubyのSetと大体一緒

Directory -> RubyとHashと大体
一緒

Taple -> ?
Rubyにはタプルがない、、、
TapleはRubyにないけど、
タプルっぽいことは出来る
Ruby
タプルはないが固定した配列
は作れる
> rb_tupple

= [1, 2, 3].map(&:freeze).freeze
Python
> py_tupple = (1, 2, 3)

> py_tupple[0] = 4 => 代入
しようとすると代入不可なの
でエラーになる
VimerがVimのプラグインを入れたら

何でもできるっていうのに近いかも・・・
制御構文 ifを例にあげて
Ruby
a = 0

if a > 0

puts "if"

elsif a == 0

puts "else if"

else

puts "else"
puts "kouti if saikou" if 1 > 0
Python
a = 0

if a > 0:

print "if"

elif a == 0:

print "else if"

else:

print "else"
if 1 > 0: print "kouti if ga nai!!!!!"

後置ifがない!!!
mapメソッド
Ruby



> [1, 2].map{¦i¦ i * 2}

[2, 4]
Python
> map(lambda i: i * 2, [1,
2])

[2, 4]
eachメソッド
Ruby



> [1, 2].each{¦i¦ puts i}

1

2
Python
> for i in [1,2]: print i

1

2
mapとeachの使い方を合わせると

Rubyの方が直感的
文字列
Ruby



str = "abcdefg"

長さ

> str.length

検索

> str.index( b")

切り取り

> str.slice(0,2)
Python
str = "abcdefg"

長さ

> len(str)

検索

> str.find("b")

切り取り

> s[0, 2]
OOP的にもどう?ここはRuby良くない?
インタプリタ以外の実行環境
RubyもPythonもインタプリタで
実行する関係上

実行速度に度々問題にあがる
AltRuby, AltPythonを対決形式で
やっぱりあるよねJVM
Ruby



JRuby
Python
Jython
Javaのバーチャルマシンで走らせるのって

作りやすいのかな?
C言語にコンパイルできれば早い
Ruby



Crystal
Python
Cython
両方とも完全にRuby, Python互換ではない?

この辺よくわかってない
ライブラリ名比較
Rubyは中学生が考えたようなライブラリ名が多い
メジャーなライブラリでも
• kaminari(雷)
• nokogiri(鋸)
Pythonにもおんなじ何じゃないの?
実際に調べてみた
Knight
Knight
Ruby
ある
https://rubygems.org/
gems/knight
Python
ある
https://pypi.python.org/
pypi/knight-001/1.2.0
Ninja
Ninja
Ruby

ある
https://rubygems.org/
gems/ninja
Python
ある
https://pypi.python.org/pypi/
ninja/1.5.3
Samurai
Samurai
Ruby
ある
https://rubygems.org/
gems/samurai
Python
ある
https://pypi.python.org/
pypi/samurai/0.6
Dragon
Dragon
Ruby
ある
https://rubygems.org/
gems/dragon
Python
なし
ドラゴンは無いけど

ドラゴンフライ(トンボ)は両方ある



ライブラリ名の中二臭さはどっこい
まとめ
• 基本構文は似てるけど、Rubyのほうが好き
• インデントでブロック制御するのはけっこういい
• 新しい言語を学ぶのは楽しい
• 作るものにあった言語やライブラリを選定をするの
がプロ
結論: Pythonのこと、オレきらいじゃないぜ

RubyエンジニアがPythonをdisるためにPythonを勉強してみた