サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
体力トレーニング
qiita.com/supermomonga
まえがき Ruby を仕事で使う上で、「モルダー、あなた疲れてるのよ」を出力したり、出力しなかったりしたいことはままあります。 そこで今回は「モルダー、あなた疲れてるのよ」を出力したり、出力しなかったりします。 本文 コード def mulder %w[モルダー あなた 疲れてる のよ].shuffle.each_slice(2).map { |ws| ws.map { |w| w.chars.each_slice((w.size/2.0).ceil).map(&:join) }.flatten.tap{ |_| break [_[2], _[1], _[0], _[3]] if rand(2) == 0 } }.flatten.insert(2, '、').join end loop.with_index(1) do |_, i| print "#{i}: " puts mulder.t
qiita.com
最近不適切にFizzBuzzをやるのが楽しく、常にFizzBuzzのことばかり考えている気がします。これが"恋"というものなのでしょうか。 というわけなので、最近書いたFizzBuzzをいくつか紹介したいと思います。 basic.rb 基本パターン (1..100).each do |n| puts case 0 when n % 15 then :FizzBuzz when n % 3 then :Fizz when n % 5 then :Buzz else n end end いいですね。ポイントはcaseの使い方です。caseは、caseに渡したオブジェクトと、各when節の評価結果を===メソッドで比較します。例えばFizzBuzzに該当するかの判定部分は0 === n % 15といった処理が走ることになるわけですね。 tap.rb tap with breakの活用
%w`foo bar baz`.map{|it| it.upcase } #=> ["FOO", "BAR", "BAZ"] それぞれの要素に対してupcaseを適用する、ただそれだけのためにitを2回も記述しなければなりません。Rubyはブロックを多用する言語なのでこの様なコードを書く機会が多く、やがてあなたは辟易するはずです。 上記の例ではmap(&:upcase)と書き直すことができますが、ブロックを使用しない方向に進んでしまうと、少しでも処理が複雑になると破綻してしまいます。詳しくはブロックなしRubyをやろうとすると関数型プログラ…うーんリストプロセッ、えーと感じ感じを参照してください。 Procを拡張しよう、ということでおもむろにlambda_driverをインストールするのも良いですが、今回はブロックそのもの(ブロックを取り扱うメソッドそのもの)を拡張する形でこれの解決を図り
p <<PHP_VERSION <?php PHP_VERSION ;print "\033[1F\033[1M"; //.tap{ define_method :range, -> s,e { s.upto e } } //.tap{ define_method :array_map, -> f,seq { seq.map{ |x| f.(x) } } } //.tap{ define_method :function, -> x,&b { -> x { $x=x;b.call } } } array_map(function($x){ print $x % 15 == 0 ? 'FizzBuzz' : ($x % 3 == 0 ? 'Fizz' : ($x % 5 == 0 ? 'Buzz' : $x)); print "\n"; }, range(1,100)); ruby php.
IQ1450で美少女JSの先輩「 存在しないローカル変数の参照について Rubyでは存在しない変数名を参照しようとするとエラーになります。 p sugoi #=> NameError: undefined local variable or method `sugoi' for main:Object (NameError)
ブロックなしRubyをやることでRubyを関数型言語、というかLispっぽくやっていくことについて考えてみます。なお筆者はLispあんまり詳しく無く、「リストに対する操作の適用をネストさせてなんかいい感じにするやつ」くらいの認識で言いました、ごめん。 ブロックなしRuby初級 xs = %w`akechi kokoro itoh chika ayase ena koshimizu sachiko` xs.map{|it|it.capitalize} #=> ["Akechi", "Kokoro", "Itoh", "Chika", "Ayase", "Ena", "Koshimizu", "Sachiko"]
このページを最初にブックマークしてみませんか?
『@supermomongaのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く