RubyのArrayとかHashのuniqueに関する挙動のメモ
RubyのArrayにはuniq
ってメソッドがあるじゃん?
irb(main):001:0> [:foo, :bar, :baz, :foo] => [:foo, :bar, :baz, :foo] irb(main):002:0> [:foo, :bar, :baz, :foo].uniq => [:foo, :bar, :baz]
この辺はあたりまえだが、 たまにお世話になる多重配列になると脳内インタプリタの挙動が怪しかった。
irb(main):003:0> [[:foo, 1], [:foo, 2]].uniq => [[:foo, 1], [:foo, 2]] irb(main):004:0> [[:foo, 1], [:bar, 1]].uniq => [[:foo, 1], [:bar, 1]] irb(main):005:0> [[:foo, 1], [:foo, 1]].uniq => [[:foo, 1]]
結果を見れば当たり前といった感じだった。 ちなみに、Hashはこんな風に動くらしいっす。
# 当たり前 irb(main):006:0> { foo: 1, bar: 2, foo: 1 } => {:foo=>1, :bar=>2} # ココ重要 irb(main):007:0> { foo: 1, bar: 2, foo: 2 } => {:foo=>2, :bar=>2} # もう一回 irb(main):008:0> { foo: 1, bar: 2, foo: 2 } => {:foo=>2, :bar=>2}
keyとvalueがともに重複する場合は、ランダムではなく後方の値に上書きされるらしい(?)
ちなみに、どうしても1つにkeyに複数のvalueを持たせたかったら、
irb(main):009:0> h = Hash.new { |h, k| h[k] = [] } => {} irb(main):010:0> h[:foo] << :bar => [:bar] irb(main):011:0> h[:foo] << :baz => [:bar, :baz] irb(main):012:0> h => {:foo=>[:bar, :baz]}
って書けばいいらしいよ!
- 作者: Rubyサポーターズ,すがわらまさのり,寺田玄太郎,三村益隆,近藤宇智朗,橋立友宏,関口亮一
- 出版社/メーカー: 技術評論社
- 発売日: 2013/08/10
- メディア: 大型本
- この商品を含むブログ (16件) を見る
.irbrcを使って、irb起動時によく使用するコードをメソッド化する
意外と知られていないようですが、irb コマンドは起動時に.irbrc というファイルを読み込みます(*1)。ここに様々な設定やメソッドを書くことができます。
例えば、自分はrails consoleでよく
irb(main):001:0> User.find_by_user_name 'yachibit'
というコードをよく書きます。毎回これをタイプしてもいいのですが、面倒なので.irbrcに以下のようなメソッドを書いています。
def me User.find_by_user_name 'yachibit' end
こうしておくと、
irb(main):001:0> me
だけで目当てのレコードを引くことができます。 他にももっと便利な使い方ができそうですね。 便利な使い方がありましたら、ぜひ教えて下さい。
※1: 最初にホームディレクトリを読み込み、ホームディレクトリに .irbrc が存在しない場合は、カレントディレクトリの .irbrc, irb.rc, _irbrc, $irbrc を順番にロードしようと試みるそうです。
ref: http://docs.ruby-lang.org/ja/2.1.0/library/irb.html
- 作者: Yugui
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/06/26
- メディア: 大型本
- 購入: 27人 クリック: 644回
- この商品を含むブログ (251件) を見る
「達人プログラマー」を読み始めました
言わずとしれた古典的名著「達人プログラマー」を読んだ。(今更?というツッコミはご容赦頂きたい。) ページをめくるたびに次々とアンダーラインを引きたくなる箇所が出てるく。 気を抜くとアンダーラインで溢れ返ってしまう、そんな本だった。
本書は方法論が書かれた技術書であると同時に、プログラマーとしての心構えが記された哲学書でもある。まえがきにはこうある。
達人プログラマーになるためには、常に自分自身が何をやっているかということを考え続ける必要があります。これは、今行っている作業をどこかで1度だけ検証するということではありませんー日々の意志決定、あるいは各開発での意志決定すべてに対する継続的かつ批判的な評価です。絶対に漫然と行ってはいけません。絶え間なく考え続け、リアルタイムで自身の作業を批判するのです。
こういった一文一文から、著者のプログラミングや仕事への真摯で情熱的な姿勢がひしひしと伝わってきて、襟を正される。
以下は本書を読んだ中で、特に筆者の心に響いた箇所をまとめたい。
責任を持つこと
他人や他の何かを非難したり言い訳をしてはいけません。すべての問題をベンダー、プログラミング言語、管理、同僚のせいにしてはいけません。(中略)彼らは問題を解決するためにあなたに従事しているのであって、弁解のためにいるわけではないのです。
まず悪いニュースを報告する前に、何かできることはないでしょうか? おそらく追加のリソースが必要となるかも知れません。しかし、こういった助けが必要であることを要求したり認めることを恐れてはいけません。
大きく声を上げる前に中途半端な言い訳を無くすことです。もし何か言わないと気が収まらないのであれば、猫にでも言うことです。
例えば、他人のミスが原因でバグが発生したとしよう。そのバグは、他人が原因で発生したものなのか、自分が原因で発生したものなのかなどは関係ない。それは避難すべきものではなく、「自らの問題」として解決を試みるべきものなのである。
- いい加減な言い訳よりも対策を用意すること
道具に拘ること
道具は職人の考えたこととその作品をつなぐパイプとなり-つまり職人の手の一部となるわけです。(中略)道具はあなたの能力を増幅します。道具が良ければ、より簡単に道具を使いこなせ、より生産的になれるのです。
あなたは一芸に秀でていなければならないのです。単に直線的にタイピングを行い、マウスを使ってカット・アンド・ペーストをしているだけではだめなのです。強力なエディターとあなたの指先を使えば、高い生産性を上げることができるようになるのです。
筆者は普段、テキストを編集する際にvimを使用しているが、"ふつうに使える"程度のレベルであり、熟達しているとはとても言い難い。一方、筆者の周囲の凄腕プログラマー達は、ほぼ例外なくエディターを使いこなし、肉眼で追うことが難しいほどの、まさに思考の速度でテキストを切り刻んでいく。
- 一つのエディターを熟知すること
誇りと愛着
達人プログラマーは責任逃れを潔しとしません。代わりにチャレンジを受け入れること、技術を発揮することに喜びを感じるのです。我々が設計やコードに対して責任を持てるのであれば、我々自身の仕事に誇りを持てるはずです。
匿名性が、だらしなさ、誤り、無精、まずいコードの温床となり、特にプロジェクトが 大規模になると、それが顕著に現れてくるのです。
我々は所有することによって誇りを持つべきなのです。(中略)それが本当のプロの仕事です。それが本当のプロによって記述されたものなのです。
我々が日々生産するコードはGitに記録されていく。記述者に関する情報はauthor
としてログに記される。我々は日々のコード1行1行、1コミット1コミットに責任と誇りを積み重ねていかなければならないのである。
- あなたの作品に署名すること
と簡単に纏めてみたものの、筆者はまだ本書を”読んだ"という段階に過ぎない。ここに書かれていることは、無意識に実践できるようになるまで反復し、血肉とせねばならない。
そのためには、本書を常に手元においておく必要があるだろう。日々の仕事の取り組みを批判的に振り返り、本書の記述と照らしあわせて評価し、軌道修正を試みる。そうしたプロセスを、この本がボロボロになるまで(※1)幾度と無く繰り返えさねばなるまい。そういう意味では、本書を”読み終えた”というより、"読み始めた"と表現しておいた方が正確なのだろう。
※1: 電子化したのでボロボロになることはないのだが。
- 作者: アンドリューハント,デビッドトーマス,Andrew Hunt,David Thomas,村上雅章
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2000/11
- メディア: 単行本
- 購入: 42人 クリック: 1,099回
- この商品を含むブログ (347件) を見る
このコンピュータ書がすごい! Forkwell 版
リーン開発の現場
- 作者: Henrik Kniberg,角谷信太郎,市谷聡啓,藤原大
- 出版社/メーカー: オーム社
- 発売日: 2013/10/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (7件) を見る
Railsでブラウザ上のエラー表示をdevelopmentとproductionで同じにする
Railsのconfigにはconsider_all_requests_local
という設定項目があって、こいつをtrue
にすると、すべてのエラーをブラウザに表示をするかことがでいる。逆に、false
に設定すると、ブラウザには詳細情報が表示されない。
デフォルトでは、
development環境はtrue
、
production環境はfalse
になっている。
エラー時の動作を確認する際、developmentでもproductionと同様の動作をさせたいときは、こいつをconfig.consider_all_requests_local = false
としてあげればproductionと同様の動作を確認できる。
ちなみに、設定ファイルはここにあります。
- development: config/environments/development.rb
- production: config/environments/production.rb
ref:
http://guides.rubyonrails.org/configuring.html#rails-general-configuration
Crafting Rails 4 Applications: Expert Practices for Everyday Rails Development (The Facets of Ruby)
- 作者: José Valim
- 出版社/メーカー: Pragmatic Bookshelf
- 発売日: 2014/02/04
- メディア: Kindle版
- この商品を含むブログを見る