JavaScriptの中にはコードをもっとシンプルで見やすくできるパターンがあるのに、あまり使われていないものがあります。皆さんも Function.prototype.bind はご存じでしょう。頻繁に使われていた var that = this や var self = this の代わりになる関数です。よくあるのが以下のような例です。 this.setup = function () { this.on('event', this.handleEvent.bind(this)); }; 第1引数が bind (束縛)され、返される関数内で this として働きます。あまり知られていませんが bind は複数の仮引数を取ることができ、 bind された関数が呼び出されると bind される後続のすべての仮引数は、その仮引数リストの前に付加されます。 つまり以下のように、関数を部分適用す
ベンチャーキャピタルの Y コンビネーターはラムダ計算の Y コンビネーターから名付けられている。その Y コンビネーターについて JavaScript での説明をメモっとく。 階乗の再帰的な関数定義 JavaScript で階乗を再帰的に定義して、5の階乗を求めるとこうなる。 function factorial(n) { return n == 0 ? 1 : n * factorial(n - 1); } factorial(5); // => 120 この場合 factorial という名前で関数を定義しているので再帰的に関数呼び出しができている。しかし Y コンビネーターを使うと無名関数での再帰的な関数呼び出しが実現できてしまう。まあ、JavaScript だと arguments.callee で下記のように実現できてしまうのだけど、arguments.callee を使わなく
最近RubyからElixirに流れて、何でも関数で書きたい子供みたいな厄介な病気になってしまいました。 Kotlin触ってN日目程度なので何か思いつくたびに書き足していこうと思います Recrucive 例えばこんなコード defmodule String do def multiply(text, count) do multiply(text, count, "") end def multiply(_text, 0, temp) do temp end def multiply(text, count, temp) do multiply(text, count - 1, temp <> text) end end String.multiply("Hello", 10000) # => "HelloHelloHelloHelloHe........ fun main(args: A
learning Scalaz How many programming languages have been called Lisp in sheep’s clothing? Java brought in GC to familiar C++ like grammar. Although there have been other languages with GC, in 1996 it felt like a big deal because it promised to become a viable alternative to C++. Eventually, people got used to not having to manage memory by hand. JavaScript and Ruby both have been called Lisp in sh
scalaosusume.md Scala おすすめポイントご紹介 おすすめポイント 普段Scalaを使っていて、この機能は便利、よくできていると感じているところをご紹介します。 準備 開発環境 plenvみたいなやつあるの? ライブラリはどうやっていれるの? cpanfile/Gemfileみたいなのあるの? 自分で書いたコードのビルドはどうやるの? 全部sbtでできる(まじか) インストール がんばってJDKをインストールしよう! そしてsbtをインストールしよう! $ brew install sbt sbtのチュートリアル Hello, World build.sbt name := "hello" scalaVersion := "2.10.3" Hello.scala object Hello { def main(args: Array[String]) = println(
この記事は、Rubyを書くにあたって「いかにブロックを書かずにすませるか」を追求した、誰得な連載である。 だって、ブロックって汚いじゃん?仮引数の|x|とかキモイ。 Symbol#to_proc 基本中の基本。 instance method Symbol#to_proc 以下のようなArrayがあって、 irb(main):003:0> arr = [:user, :entry, :article, :comment, :category] => [:user, :entry, :article, :comment, :category] 各要素をto_sしたかったら、 irb(main):004:0> arr.map{|s| s.to_s} => ["user", "entry", "article", "comment", "category"] と書くかわりに、 irb(main)
ブロックなし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"]
先日「ブログ書きが不調」と書いたが、言語のアウトプットが不調なときは、それ以外のことをするに限る...たとえば黙々とプログラムを書く、音楽に浸る、身体を酷使する、などだ。というわけで月曜日、天気は晴れなかったものの、研究のデータ処理に使うRubyスクリプトを書きまくって鬱憤を晴らしていた。 ところがそのプログラム脳のまま夜にはVimM#4に行こうとした時、そういえば内定者3人によるSkype会議が予定されていた(つまりダブルブッキング)ことを思い出し、自分の阿呆さに呆れ、本当にすみません、でもって結局気分は晴れず。 前置き(ただの日記)終わり。 本題。 Rubyの配列でいろいろいじる時に、for i in ...と array.each でだいたいできるんだけど、もちっとスマートにやりたいなぁと思って調べていたらこれ使えるんじゃね?と気がついたことがいくつかある。zipとinjectとev
rubyで1引数関数をmapに渡す場合は、こんなかんじでメソッドのシンボルをProcオブジェクトとして渡せて関数プログラミングっぽい書き方ができるんだけど、 irb > ('a'..'c').map &:upcase => ["A", "B", "C"] 2引数になるとどう書けばよいんやろうと思ってたのだけど、パーフェクトRuby読んでたら、9.3章MethodオブジェクトとProcオブジェクトのところにこんな書き方が載ってた。 irb > (0..10).map &2.method(:*).to_proc => [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20] ぜんぜん直感的じゃないけど、数字の2のインスタンスから乗算メソッド*のMethodオブジェクトを取得して、Procオブジェクトに変換して渡してる。数字の2はMehtodオブジェクトのレシーバとして束縛
古き良き小学校の時代、この行には困惑させられたものだった。 魔術的な x が、加算されたのに等しいままでいる事に。 どういうわけか、プログラミングを始めると、それに構わなくなる。 「やれやれ、それは重大な事柄じゃないし、プログラミングとは現実のビジネス行為なんだから、 数学的な純粋さについてあら探しなんて必要無い (その議論なら、大学にいる狂った髭面野郎どもにさせておけばいい)」と思っていた。 けれども、ただ知らなかっただけで、我々が間違っていて高い代償を支払っていたのは 明らかである。 Wikipedia によれば、「関数型プログラミング(functional programming, FP)とは、 計算を数学的な関数の評価とみなし、 状態や可変データを避けるプログラミングパラダイム」である。 言い換えると、関数型プログラミングは、 副作用が無く変数の値を変化させないコードを推奨する。
This document is compiled from RubyFunctionalProgramming by Arnau Sanchez (tokland) Japanese version is also available. Table of Contents Introduction The theory Functional programming in Ruby Don't update variables Blocks as higher order functions OOP and funcional programming Everything is an expression Recursion Lazy enumerators A practical example Conclusion Presentations Further reading Intro
本稿では、関数型プログラミングのコンセプトを実用的な方法でRubyのコードに盛り込む方法について紹介します。これは、私が「関数型プログラミングのスタイル」と呼んでいるものです。 私が言う「実用的」とは、関数型プログラミングのスタイルを取り入れた後もなお、コードの見た目や印象にRubyの特徴が残っていることを意味します。Rubyは、Haskellではありませんし、Haskellであるべきでもありません。考え方としては、この言語の性質を 利用しよう とするものであって、それに反することをするわけではないのです。出来上がったコードは、Rubyユーザにとって簡単に理解できるものであるべきです。うまくいけば、使い慣れているものよりも簡単と感じていただけるはずです。 では、可変性を回避する利点、方法、欠点、そして可変性の回避が適切ではないケースについて見ていきましょう。 なぜ可変性を回避するべきなのか
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く