タグ

ブックマーク / melborne.github.io (10)

  • Ruby、君のオブジェクトはなんて呼び出せばいいの?

    Rubyには大量のメソッドがあります。次のコードでRuby1.9.3に含まれるメソッド数を数えたら単純合計で1659個、ユニーク数(同名を1と数えて)で937個と出力されました。 all_methods = ObjectSpace.each_object(Module).flat_map do |c| c.methods(false) + c.instance_methods(false) end.reject { |m| "#{m}".start_with? '_deprecated' } all_methods.size # => 1659 methods = all_methods.uniq methods.size # => 937 つまりRubyには、937個もの異なる名前のメソッドがあるのです。各メソッド名は、その動作や機能を端的に表現したものでなければならないので、その一つ一

    h6n
    h6n 2012/07/17
  • Rubyのinjectで東京までの最短経路を解くYO!

    「すごいHaskellたのしく学ぼう!」の第10章に、Haskellを使って「ヒースロー空港からロンドンへの最適経路(optimal path)」を算出する例が出ていました。例ではその実現に畳み込み演算が使われていたので、前回同様、Rubyでもinjectを使ってこの問題を解いてみたいと思います。アヒル脳じゃなかなかHaskellの世界に入っていけませんよー。 オリジナルの解説(英語)とHaskellによる解法は、以下にあります。 Functionally Solving Problems - Learn You a Haskell for Great Good! 問題 問題設定は次のようなものです。 1. 成田空港(NRT)から東京(Tokyo)に向かう2の幹線道路A,Bがある。 2. 途中にこれらを橋渡しする3の地方道路Cがある。 3. 地方道路で区切られる各道路セグメントの通過に

  • Rubyのinjectで逆ポーランド記法電卓を書くYO!

    「すごいHaskellたのしく学ぼう!」を読んでます。こののタイトルとカバーデザインはかなりミスリードですね!もしこのを入門書と呼ぶのなら、僕の脳に相当の問題があるか、Haskellが相当に難解であるかの何れかと断定せざるを得ません。いや、おそらく問題は僕の脳にあるのでしょう。そうであれば安心です。プログラム言語はツールなのですから難解であってはなりませんからね。Rubyはアヒル言語ですから、知らないうちに僕の脳もすっかりアヒル脳になっていたのですね.. ミスリードだなんて言ってすいませんでしたm(__)m1 さて、このの第10章にHaskellによる「逆ポーランド記法電卓」の例が出ていました。例ではその実現に畳み込み演算が使われていたので、前回記事にしたinjectを使ってRubyでこの電卓を書いてみます。 逆ポーランド記法 逆ポーランド記法では演算子が数字の後にきます。 この演算

  • YOUたち!RubyでinjectしちゃいなYO!

    プログラミングの存在価値は処理の自動化です。任意の集合に対して処理を繰り返しその結果を返す、それがプログラムです。つまり集合に対して処理を繰り返す能力が、プログラムの価値を決定付けるのです1。 「手続き型言語」ではループが処理の繰り返しを実現するための重要な手法の一つです。しかしループは、一時変数を用意してプログラマがループの進行を管理しなければならない、という欠点があります。そしてその管理ミスがバグとなります。 「関数型言語」では再帰が処理の繰り返しを実現するための重要な手法の一つです。再帰では再帰の進行はその構造に基づいて自動的になされるので、プログラマがそれを管理する必要はありません。しかしその一方で、処理が多段階に渡る立体的なものとなるので、その動作の理解が平面的なループ処理に比べて難しいという欠点があります。習得には慣れが必要です。 Rubyは、手続き型言語と関数型言語の両方の側

  • Object#doメソッドというのはありですか?

    以前の投稿でBasicObject#instace_evalを使って、平均値avgと標準偏差sdを求める例を紹介しました。 avg = [56, 87, 49, 75, 90, 63, 65].instance_eval { inject(:+) / size } # => 69 scores = [56, 87, 49, 75, 90, 63, 65] sd = scores.instance_eval do avg = inject(:+) / size sigmas = map { |n| (avg - n)**2 } Math.sqrt(sigmas.inject(:+) / size) end sd # => 14.247806848775006

    h6n
    h6n 2012/06/22
  • 第3弾!知って得する12のRubyのトリビアな記法

    (追記:2013-08-16) 記事のトリビアを含む55のトリビアを以下の記事にまとめました。 知って得する!55のRubyのトリビアな記法 なぜかトリビア人気が再燃しているよ。 知って得する21のRubyのトリビアな記法 第2弾!知って得する12のRubyのトリビアな記法 これでみんながトリビア好きだということが分かったので、何とか絞り出して第3弾を書いたよ。ここでは第1弾、第2弾で使ったテクニックも使ってるから、知らないテクニックがあったら先に見てもらえるいいかもね。 1. Enumerable#each_with_object Enumerable#mapではブロックの代わりに&付きのシンボルを渡す技が知られているよ。 langs = ["ruby", "python", "lisp", "haskell"] langs.map(&:capitalize) # => ["Ruby"

    h6n
    h6n 2012/06/21
  • 知って得する21のRubyのトリビアな記法

    (追記:2013-08-16) 記事のトリビアを含む55のトリビアを以下の記事にまとめました。 知って得する!55のRubyのトリビアな記法 ちょっとトリビアだけど、知っていると意外と便利なRubyの記法を21個拾ってみたよ(Ruby1.9限定)。 君なら全部知ってるかもしれないけど.. 1. 動的継承 Rubyのクラス継承では < 記号の右辺にクラス定数だけでなくクラスを返す式が書けるよ。 class Male def laugh; 'Ha ha ha!' end end class Female def laugh; 'Fu fu fu..' end end class Me < [Male, Female][rand 2] end Me.superclass # => Female Me.new.laugh # => 'Fu fu fu..' def io(env=:develop

    h6n
    h6n 2012/06/21
  • 第2弾!知って得する12のRubyのトリビアな記法

    (追記:2013-08-16) 記事のトリビアを含む55のトリビアを以下の記事にまとめました。 知って得する!55のRubyのトリビアな記法 半年くらい前にちょっとトリビアだけど、知っていると意外と便利なRubyの記法を21個紹介したよ。 知って得する21のRubyのトリビアな記法 ~ 21 Trivia Notations you should know in Ruby 今回はその第2弾だよ! ちょっと数が少ないけど、知らないものがあったらへーとかほーとか、得したとか言ってもらえるとうれしいよ。 1.Enumerator#with_index 任意のリストを標準出力するときに連番を同時に振るとしたら、普通はEnumerable#each_with_indexを使うよね。 names = Module.constants.take(10) names.each_with_index {

    h6n
    h6n 2012/06/21
  • SinatraはDSLなんかじゃない、Ruby偽装を使ったマインドコントロールだ!

    Sinatraのサイトを開くとSinatraはDSLだと書いてある。 Sinatra is a DSL for quickly creating web applications in Ruby with minimal effort: (SinatraはRubyで手早くWebアプリケーションをつくるためのDSLです) DSLというのはDomain-Specific Language、つまり特定の目的に特化した言語のことだ。確かにSinatraはWebアプリケーションという特定の目的のために作られたものだけれども、それは言語じゃない。 それが言語といえるためにはオブジェクトのように独立していて閉じてなきゃいけない1。でもSinatraは独立も閉じてもなくて、Rubyに寄生することで存在している。 いやSinatraは言語どころか、Rubyの上の専門用語ですらない。 それが用語といえるために

  • これからRubyを始める人たちへ

    (追記:2012-12-03) 記事を電子書籍化しました。「Gumroad」を通して100円にて販売しています。詳細は文末に追記しましたので、購入ご検討のほどよろしくお願いしますm(__)m 電子書籍「これからRubyを始める人たちへ」EPUB版 Rubyの特徴 Rubyは、まつもとゆきひろ氏(通称Matz)により設計されたオブジェクト指向プログラミング言語です。Rubyの特徴を一言で言うならば、それは「間口が広くて奥が深い言語」ということになります。 「間口が広い」というのは、インタフェースがシンプルで誰でもが簡単に使い始められることを意味します。「奥が深い」というのは、プロフェッショナルによる長期使用に耐えうる物の言語であるということを意味します。「間口が広い」ということと「奥が深い」ということは来競合する概念ではありませんが、その両方をバランスよく組み合わせるには、対象に対する

  • 1