Más contenido relacionado Similar a 人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHP (7) 人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHP2. お前誰よ
• うさみけんた a.k.a. Zonu.EXE(ぞ)
• Twitter: @tadsan; GitHub: @zonuexe
• %r/たっ?どさん/ と呼ぶと反応します
• 好き: カラオケ、アニメソング、やる夫スレ
• 2012年に脱北して東京にきました
9. // JavaScriptの場合
var strToInt = function(v){ return parseInt(v); };
["1", "2", "3"].map( strToInt );
["1", "2", "3"].map( function(v){ return parseInt(v); } );
高階函数とは?
// Rubyの場合
str_to_int = ->(v){ v.to_i }
["1", "2", "3"].map( &str_to_int )
["1", "2", "3"].map{|v| v.to_i }
11. scripter = ->(*args){ ->{ puts args.join("n") } }
title = ->(text) { "『#{text}』n" }
paragraph = ->(*args){ args.join("n") + "n" }
chara = ->(name) { ->(text){ "#{name}「#{text}」"} }
ryu = chara[:リュウ]; tak = chara[:たかし]
script = scripter[title[:俺より強い奴に、会いに行く],
paragraph[:ピンポーン, ryu[:こんにちは], tak[:はいどなた]],
paragraph[ryu[:いまちょっといいですか], tak[:これから出かけます]],
paragraph[ryu[:午後出勤ですか?], tak[:はい]],
paragraph[ryu[:強そうですね], tak[:なにがですか]],
paragraph[ryu[:態度が]],
paragraph[:リュウは、自分より強そうな奴に、会いにいったのだった。 完]
]
script[]
スクリプト(台本)
27. # ruby
# awesome/array.rb
class Array
def method_missing name, value
# なんかすごい処理をしてくれる
end
end
# awesome.rb
require 'awesome/array'
array.hoge.each(&:init) #なんか初期化
Rubyとオープンクラス
31. # ruby
foo = "foo"
def foo
"FOO"
end
p foo
メソッドと変数
同じ名前のローカル変数と
メソッドがあると、変数が優先される
32. メソッドと変数
# python
foo = "foo"
def foo():
return "FOO"
print(foo)
#=> <function foo at 0x108e6a8c0>
函数は代入文と同じ変数空間
なので、defが上書きする
()をつけないと函数呼び出し
ではないので、函数そのもの
がプリントされる
33. メソッドと変数
# php
$foo = "foo";
function foo() {
return "FOO";
}
var_dump($foo);
var_dump(foo());
変数には$が必須。
そもそも名前空間が別物なの
で、衝突しないことは明確。
37. Pythonのmap
# python
ary = [[1, 3], [2, 4]]
class Foo:
@staticmethod
def bar(v):
return v[0] + v[1] * 10
list(map(Foo.bar, ary))
超わかりやすい!
38. PHPのmap
# php
<?php
$ary = [[1, 3], [2, 4]];
trait Foo{
function bar(array $v) {
return $v[0] + $v[1] * 10;
}
}
array_map('Foo::bar', $ary));
完全にわかりやすい!!
39. # ruby
ary = [[1, 2], [3, 4]]
module Foo
def bar(v); v[0] + v[1] * 10; end
module_function :bar
end
p ary.map{|v| Foo.foo(v) }
# 短く書くには…?
## たぶん短くならない
Rubyのmap
メソッドの再利用は
実は意外にめんどい
41. タイプヒント
# php
function foo(array $config = []){ … }
foo(1);
#=> PHP Catchable fatal error:
Argument 1 passed to foo() must be of
the type array, string given, called
in Command line code on line 1 and
defined in Command line code on line 1
42. クロージャ
# ruby
jojo = ["joseph", "jotaro", "josuke"]
is_jojo = ->(name) {
return jojo.include?(name)
}
43. クロージャ
# php
$jojo = ["joseph", "jotaro", "josuke"];
$is_jojo = function ($name) use ($jojo)
{
return in_array($name, $jojo);
};
49. 使用フォント
セプテンバーM・L
IPAex明朝
M+ 1c black
_
\ヽ, ,、
`''|/ノ
.|
_ |
\`ヽ、|
\, V
`L,,_
|ヽ、)
.|
/ ,、
/ ヽYノ
.| r''ヽ、.|
| `ー-ヽ|ヮ
| `|
ヽ, ,r .|
ヽ,r'''ヽ!'-‐'''''ヽ、ノ
,,,..---r'",r, , 、`ヽ、 ヾ
ヽ、__/ ./ハレハ i`ヽ、 `''r`ミ_
.レ//r,,,、 レ'レハヾ, L,,_ `ヽ、
"レ, l;;;l l;;;l`i.リレ' リ ̄~~
ヽ、 ワ `"/-'`'`'
`''''''''" ┼ヽ -|r‐、. レ |
d⌒) ./| _ノ __ノ