2015 07-04-ruby rails
TRANSCRIPT
Rubyらしいプログラムを書くためのコツ~配列編
Ruby / Ruby on Rails ビギナーズ勉強会 第6回 #coedorb
photo by poluz! http://www.flickr.com/photos/poluz
自己紹介
•派遣で6年程エンジニア&PM •WindowsのActiveDirecotryとか • 2005年~2014年までは人材系の仕事 •エンジニア専門のキャリアコンサルタント •昨年からなぜかフリーランス •しかもWeb系のエンジニア • Rails4+AngularJS。最近は仕事でRubyでクローラー開発とかも行う
•実はJavaScriptが好きでこっちのほうが経験が長い •Titanium Mobile、Node.js、最近だとNW.js •(最近メンテ辞めましたが)クラフトビールが飲める買えるお店が探せるスマフォアプリ、Webサイトを全部JavaScriptベースの技術で作ってました
このセッションをやろうとしたキッカケ
©jeffrey james pacres http://www.flickr.com/photos/jjpacres/3293117576/
Agenda 1.Rubyの言語の特徴を紹介 2.Rubyの配列処理サンプル
プログラミング言語の歴史からRubyの成り立ちを知るRubyはRubyはALGOL系言語(C→Perl)とLisp系の両方の流れを組んでるらしい
ALGOL系言語:手続き型プログラミング言語Lisp系言語:関数型プログラミング言語
初めてのRubyより引用
手続き型と関数型の書き方比較• 関数風のコードは定義の連鎖
• 手続きではなく「これは~です」という宣言とか定義が並ぶ • http://www.slideshare.net/parrotstudio/gunmaweb-5-20110514から引用
手続き風に書いた場合
関数風に書いた場合
もう1つRubyの特徴を
• Rubyは大クラス主義
• Javaでは、ArrayやQueueやStackやIteratorクラスのように、責務によってクラスが別れる傾向があるのに対し、RubyではすべてArrayクラスが引き受けます。このように、Rubyのクラスは、Javaよりもクラスが大きく、担う役割も大きなものになります。このような考え方は、大クラス主義と呼ばれています。他の言語だとそれぞれのクラスの責務が小さめ
• 1つのクラスで多数の機能が詰め込まれてる
さっきスクレイピングしてArray Rubyリファレンスから情報抽出してみた
→数えたら84個ありました
では実際にRubyの配列サンプルをいくつか紹介
Photo by Sebastien Wiertz via Flickrhttps://www.flickr.com/photos/wiertz/4604140980/
その1:食べ物のリストを作るには?
fruits = %w(りんご バナナ なし) vegetables = %w(ネギ にんじん ジャガイモ)
foods = fruits + vegetables # => ["りんご", "バナナ", "なし", "ネギ", "にんじん", "ジャガイモ"]
その2:好きな食べ物だけを得るには?
fruits = %w(りんご バナナ なし) vegetables = %w(ネギ にんじん ジャガイモ) my_favorites = %w(ビール コーヒー りんご ジャガイモ)
my_favorites_foods = (fruits + vegetables) & my_favorites # =>["りんご", "ジャガイモ"]
その3:ジュースだけを得るには?beverages_for_adults = %w(ビール ワイン ウィスキー ジンジャーエール) beverages_for_kids = %w(りんごジュース オレンジジュース ミルク) beverages = beverages_for_adults + beverages_for_kids # => ["ビール", "ワイン", "ウィスキー", "ジンジャーエール", "りんごジュース", "オレンジジュース", "ミルク"]
juices = beverages.select{|drink| drink.match(/ジュース/)} # => ["りんごジュース", "オレンジジュース"]
その3のサンプルをよりRubyらしく書くと?
beverages_for_adults = %w(ビール ワイン ウィスキー ジンジャーエール) beverages_for_kids = %w(りんごジュース オレンジジュース ミルク) beverages_for_kids.zip(beverages_for_adults).flatten.select{|drink| drink.match(/ジュース/)}
資料作成で参考にした情報• 初めてのRuby
• 「初めて」という言葉はついてるけど他の言語経験ある人向けの内容。とてもオススメ
• 純粋なプログラミング入門書ではないのでRubyで初めてプログラミングを学ぶにはオライリーの「初めてのプログラミング」あたりが良いかも
• るびまの「ライブラリー開発者になろう」の記事
• http://magazine.rubyist.net/?0043-BeALibraryDeveloper
• ”「よいソフトウェアを開発する」には、「似ているとはどういうことかを知って、それと同じようにする」とよいのでした。”
• Rubyと大クラス主義とダックタイピング、そして名前重要
• http://d.hatena.ne.jp/pbgreen/20111016/1318782503
ご清聴ありがとうございました