ruby

Ruby throwの使いどころ

例外ではなく、制御構造の話。 Effective Ruby作者: Peter J.Jones出版社/メーカー: 翔泳社発売日: 2015/01/19メディア: Kindle版この商品を含むブログ (5件) を見る 項目27 スコープから飛び出したい時にはraiseではなくthrowを使おう catchとthrowはgotoの…

Ruby リソースはブロックとensureで管理しよう

File::openの話にとどまらず、リソースを確保するというコードの抽象化の紹介。 (File::openについてはここでは省略) Effective Ruby作者: Peter J.Jones出版社/メーカー: 翔泳社発売日: 2015/01/19メディア: Kindle版この商品を含むブログ (5件) を見る …

Rubyの例外Tips

みんな最初は迷う例外のTips。 Effective Ruby作者: Peter J.Jones出版社/メーカー: 翔泳社発売日: 2015/01/19メディア: Kindle版この商品を含むブログ (5件) を見る 項目22 raiseにはただの文字列ではなくカスタム例外を渡そう raiseに文字列を渡すとRuntim…

RubyのSet#include? で効率化

項目18 要素が含まれているかどうかの処理を効率よく行うために集合を使うことを検討しよう Effective Ruby作者: Peter J.Jones出版社/メーカー: 翔泳社発売日: 2015/01/19メディア: Kindle版この商品を含むブログ (5件) を見る 先ずはArray Array#include? …

nil、スカラーオブジェクトを配列に変換するには、Arrayメソッドを使おう

これ知らなかった。 こんな感じで配列を引数にとる場合、「配列」、「nil」、「引数1個」を一括で処理したいと思うことがあると思う。こんな時にこれを解決する方法があった。 これは使っていこう。 Effective Ruby作者: Peter J.Jones出版社/メーカー: 翔泳…

Rubyのコレクション書き換え時の注意点

これも嵌りがちな内容。 コレクションのコピーについて。 Effective Ruby作者: Peter J.Jones出版社/メーカー: 翔泳社発売日: 2015/01/19メディア: Kindle版この商品を含むブログ (5件) を見る 項目16 コレクションを書き換える前に引数として渡すコレクショ…

クラス変数("@@")やめとけってよ

クラス変数("@@")使う人あんまりいないと思うけど、グローバル変数と同じようなもんだから使うなよっていう話。 Effective Ruby作者: Peter J.Jones出版社/メーカー: 翔泳社発売日: 2015/01/19メディア: Kindle版この商品を含むブログ (5件) を見る 項目15 …

Rubyのprotectedの使いどころ

Rubyのprivate/protectedは特殊で誰しもが混乱する設計の一つです。 そんなprotectedの使い所について書かれています。 Effective Ruby作者: Peter J.Jones出版社/メーカー: 翔泳社発売日: 2015/01/19メディア: Kindle版この商品を含むブログ (5件) を見る …

RubyのComparableモジュールで比較を実装

Effective Ruby作者: Peter J.Jones出版社/メーカー: 翔泳社発売日: 2015/01/19メディア: Kindle版この商品を含むブログ (5件) を見る 項目13 "<=>"とComparableモジュールで比較を実装しよう 例にでてくるのはバージョンの比較を実装する時の話。 例えば、"…

Effective Ruby: selfを書く場所

Effective Ruby作者: Peter J. Jones,arton,長尾高弘出版社/メーカー: 翔泳社発売日: 2015/01/09メディア: 大型本この商品を含むブログ (13件) を見る 「項目8 サブクラスを初期化するときにはsuperを呼び出そう」は、そのまんまで 子クラスでinitializeメソ…

Effective Ruby: Struct便利だよ

項目10 構造化データの表現にはHashではなくStructを使おう CSVファイルの取り込み時などに、それ用のクラスを作るの面倒だなという場合は、Structが良いというお話。 私もこの手のやつはHashだと扱いにくいので、自然とStructを使うようにしていました。 で…

Effective Ruby: superってメソッドとちゃうんやで

項目7 superのふるまいがひと通りでないことに注意しよう Effective Ruby作者: Peter J. Jones,arton,長尾高弘出版社/メーカー: 翔泳社発売日: 2015/01/09メディア: 大型本この商品を含むブログ (13件) を見る super superってメソッドではなくキーワードだ…

Effective Ruby: 特異クラスとかその辺の話

項目6 Rubyが継承階層をどのように組み立てるかを頭に入れよう 「項目5 実行時の警告に注意しよう」-wオプションと$VERBOSE変数の話でした。 知っているべき内容ですが、既に理解している内容だったので1個飛ばし。 内容的には、include時に不可視な特異ク…

Effective Ruby: 定数がミュータブルなことに注意しよう

良書やなEffective Ruby。 項目4 定数がミュータブルなことに注意しよう 定数のfreeze module Defaults NETWORKS = ["192.168.1", "192.168.2"].freeze end def host_addresses(host, networks=Defaults::NETWORKS) networks.map { |net| net << ".#{host}" …

Effective Ruby: Perlっぽい記号やめようぜ

項目3 Rubyの暗号めいたPerl風機能を避けよう お題目は、その通り!!という感じです。 例が面白かったのでご紹介。 while readline print if ~ /^ERROR:/ end ぱっと見、各行頭がERROR: で始まるものを出力しそうだというのは分かりますが、具体的にどうな…

Effective Ruby: 項目2 nilオブジェクトのNoMethodError対策

セクションごとに記事を書いていくつもりはなかったのですが、良いこと書いているなと思ったので。 項目2 オブジェクトを扱うときにはnilかもしれないということを忘れないようにしよう nilオブジェクトのNoMethodErrorに出くわすことはしばしばありますが、…

Effective Ruby: 項目1 Rubyのtrue/falseについて

項目1 Rubyは何を真と考えているかを正確に理解しよう 以下のコードを見て 一瞬あれ?となりました。 class Bad def == (other) true end end ?> false == Bad.new => false ?> Bad.new == false => true 最後のは、methodの戻り値が返っていました。 Object…

header付きCSVをJSONに変換する

銀行コードが付与された一覧を作りたかったのでwikiからnumbersで一覧にして、CSVにexportしたのちjsonに変換しました。 日本の銀行一覧 - Wikipedia Convert from CSV to JSON require 'csv' require 'json' body = File.open("japanese_banks.csv").read c…

業務時間外コミットの一覧を出すrubyのscript

CEOの方が基本18時に退社するように心掛けています、というようなことを仰っている会社にお話を聞きに行くことがありました。 そちらではGithubにその企業用のリポジトリが公開されており、検証用のコードと思われるものがいくつか存在したので、見てみたと…

Sinatraが若干変更されていた

久しぶりに少しsinatraを触って見たら、若干変更されていました(というか私が全然変更についていってないだけだと思う。)。 Versionも2.0.0か。 sinatra-contribが本家に取り込まれていた https://github.com/sinatra/sinatra/tree/master/sinatra-contrib…

7 Little-Known Ruby Methods To Help You Write Better Code

7 Little-Known Ruby Methods To Help You Write Better Code - RubyGuides 日本語だと「あなたがより良いコードを書くのを助ける7つのあまり知られていないRubyの方法」ってなもんでしょうか。 以下2つ知りませんでした。 Integer#digits ちょっと使い所が…

RE: 小学生のいとこのためにJavaで作った迷路ゲームを簡単に解説する

小学生のいとこのためにJavaで作った迷路ゲームを簡単に解説する - Qiita が面白かったので rubyで実装してみました。 rochefort/ruby-maze: Ruby implementation of hey-cube/maze 穴掘り法(道延ばし法)というアルゴリズムで迷路の「道」をどんどん作成し…

rbenv から anyenv に乗り換えました

yak shaving (ここは読まなくていい) 最近数学ガールを読んでいまして、複素数平面とかのplotをrubyでできないかと 探していたら nyaplot というのが使えそうでした。 動作環境は IRuby notebook で IRuby notebook は Anaconda の利用が推奨されています…

Gemnasium の Rubygems Monthly

Gemnasium が Rubygems Monthly というレポートを毎月出してくれるようになりました。 Gemnasium 自体はとても便利で、利用している Rubygems の更新を通知してくれるやつです。このMontylyは自分が使っていない主要なGemについても教えてくれるので、これは…

Mechanize の hook 処理について

RubyでScrapeする時はmechanizeを使って書いているのですが、ふと毎回入れていた sleep 処理を hook で対応できないかと調べてみたところ、以下の記事を見つけました。 Regulating / rate limiting ruby mechanize - Stack Overflow なるほど、 history_adde…

Simple or trump(CodeEval)

簡易版大富豪の実装。 Scoreが80%ぐらいで、何かの考慮漏れがありそうなんだけど、よくわからないので一旦諦め。 CHALLENGE DESCRIPTION: First playing cards were invented in Eastern Asia and then spread all over the world taking different forms an…

Not so clever(CodeEval)

Bubble Sort のような(よりも効率の悪い)ソートアルゴリズムを実装する問題。 CHALLENGE DESCRIPTION: Imagine that you have to arrange items in a certain order: pencils from black to white in a color palette, photographs by the date taken, ban…

Football(CodeEval)

「チーム毎のメンバーが所属する国のリスト」を「国別のチーム一覧」に変換する問題。 日本語にすると一見複雑で、途中で何やってるかわからなくなる。 nested な配列生成が少し汚い。injectにしてもあまり変わらない。 メソッド分割をすれば良いのかもしれ…

Real Fake(CodeEval)

Credit Card のcheck tool。 実際のものではなく、架空のもの。グループごとに1, 3 番目の数字を倍にして、足し上げた結果10で割り切れれば本物と判定する。 CHALLENGE DESCRIPTION: The police caught a swindler with a big pile of credit cards. Some of…

Testing(CodeEval)

文字列の差を求める問題。 CHALLENGE DESCRIPTION: In many teams, there is a person who tests a project, finds bugs and errors, and prioritizes them. Now, you have the unique opportunity to try yourself as a tester and test a product. Here, y…