Soumettre la recherche
Mettre en ligne
人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHP
•
2 j'aime
•
2,425 vues
Kenta USAMI
Suivre
RubyHiroba 2014で発表したような気がする
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 49
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
Hiro H.
rsyncで差分バックアップしようぜ!
rsyncで差分バックアップしようぜ!
Hiro H.
現実(えくせる)と戦う話
現実(えくせる)と戦う話
bleis tift
C++でぼくが忘れがちなこと
C++でぼくが忘れがちなこと
Toshihiko Ando
第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」
Hiromu Shioya
ffi for rubyists
ffi for rubyists
nanki
Making DSL with []
Making DSL with []
Yuya Takeyama
RubyでDSL
RubyでDSL
Yukimitsu Izawa
Recommandé
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
Hiro H.
rsyncで差分バックアップしようぜ!
rsyncで差分バックアップしようぜ!
Hiro H.
現実(えくせる)と戦う話
現実(えくせる)と戦う話
bleis tift
C++でぼくが忘れがちなこと
C++でぼくが忘れがちなこと
Toshihiko Ando
第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」
Hiromu Shioya
ffi for rubyists
ffi for rubyists
nanki
Making DSL with []
Making DSL with []
Yuya Takeyama
RubyでDSL
RubyでDSL
Yukimitsu Izawa
よいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれた
Moriyoshi Koizumi
そんな装備で大丈夫か?
そんな装備で大丈夫か?
2celeb
Rubyはとても「人間的」
Rubyはとても「人間的」
Kazuhiro Serizawa
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
sters
Nom de fonction français
Nom de fonction français
hajikami
20111029 rubyon php
20111029 rubyon php
do_aki
Cake assets plugin in PHP Matsuri 2012
Cake assets plugin in PHP Matsuri 2012
Hirohide Sano
5分でわかる静的解析入門
5分でわかる静的解析入門
Kenta USAMI
なんとかStormに負けたくないEmacs初級篇
なんとかStormに負けたくないEmacs初級篇
Kenta USAMI
たのしい独自フレームワーク
たのしい独自フレームワーク
Kenta USAMI
Real World PHP in pixiv
Real World PHP in pixiv
Kenta USAMI
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
Kenta USAMI
pixivとl10n/i18n
pixivとl10n/i18n
Kenta USAMI
Rubicureに学ぶメタプログラミング
Rubicureに学ぶメタプログラミング
Kenta USAMI
Accept-language
Accept-language
Kenta USAMI
php.js
php.js
Kenta USAMI
これからの名前の話をしよう
これからの名前の話をしよう
Kenta USAMI
近況の報告と自宅警備員が失職した話
近況の報告と自宅警備員が失職した話
Kenta USAMI
学ばないDSL
学ばないDSL
Kenta USAMI
札幌F#勉強会とは何だったのか
札幌F#勉強会とは何だったのか
Kenta USAMI
tadsanとは誰か
tadsanとは誰か
Kenta USAMI
DTの異常な愛情 または私は如何にして心配するのを止めてWILLCOMを愛するようになったか
DTの異常な愛情 または私は如何にして心配するのを止めてWILLCOMを愛するようになったか
Kenta USAMI
Contenu connexe
Similaire à 人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHP
よいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれた
Moriyoshi Koizumi
そんな装備で大丈夫か?
そんな装備で大丈夫か?
2celeb
Rubyはとても「人間的」
Rubyはとても「人間的」
Kazuhiro Serizawa
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
sters
Nom de fonction français
Nom de fonction français
hajikami
20111029 rubyon php
20111029 rubyon php
do_aki
Cake assets plugin in PHP Matsuri 2012
Cake assets plugin in PHP Matsuri 2012
Hirohide Sano
Similaire à 人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHP
(7)
よいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれた
そんな装備で大丈夫か?
そんな装備で大丈夫か?
Rubyはとても「人間的」
Rubyはとても「人間的」
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
Nom de fonction français
Nom de fonction français
20111029 rubyon php
20111029 rubyon php
Cake assets plugin in PHP Matsuri 2012
Cake assets plugin in PHP Matsuri 2012
Plus de Kenta USAMI
5分でわかる静的解析入門
5分でわかる静的解析入門
Kenta USAMI
なんとかStormに負けたくないEmacs初級篇
なんとかStormに負けたくないEmacs初級篇
Kenta USAMI
たのしい独自フレームワーク
たのしい独自フレームワーク
Kenta USAMI
Real World PHP in pixiv
Real World PHP in pixiv
Kenta USAMI
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
Kenta USAMI
pixivとl10n/i18n
pixivとl10n/i18n
Kenta USAMI
Rubicureに学ぶメタプログラミング
Rubicureに学ぶメタプログラミング
Kenta USAMI
Accept-language
Accept-language
Kenta USAMI
php.js
php.js
Kenta USAMI
これからの名前の話をしよう
これからの名前の話をしよう
Kenta USAMI
近況の報告と自宅警備員が失職した話
近況の報告と自宅警備員が失職した話
Kenta USAMI
学ばないDSL
学ばないDSL
Kenta USAMI
札幌F#勉強会とは何だったのか
札幌F#勉強会とは何だったのか
Kenta USAMI
tadsanとは誰か
tadsanとは誰か
Kenta USAMI
DTの異常な愛情 または私は如何にして心配するのを止めてWILLCOMを愛するようになったか
DTの異常な愛情 または私は如何にして心配するのを止めてWILLCOMを愛するようになったか
Kenta USAMI
PowerShell+Lisp = ? (第2回残パン会)
PowerShell+Lisp = ? (第2回残パン会)
Kenta USAMI
キャンプ後の生活の変化とモチベーションの変化について
キャンプ後の生活の変化とモチベーションの変化について
Kenta USAMI
関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』
Kenta USAMI
After Camp 2011『今日から始める函数型プログラミング』(内容無し)
After Camp 2011『今日から始める函数型プログラミング』(内容無し)
Kenta USAMI
黒歴史・闇RubyKaigi(美しいRubyと私 そして闇プログラミング)
黒歴史・闇RubyKaigi(美しいRubyと私 そして闇プログラミング)
Kenta USAMI
Plus de Kenta USAMI
(20)
5分でわかる静的解析入門
5分でわかる静的解析入門
なんとかStormに負けたくないEmacs初級篇
なんとかStormに負けたくないEmacs初級篇
たのしい独自フレームワーク
たのしい独自フレームワーク
Real World PHP in pixiv
Real World PHP in pixiv
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
pixivとl10n/i18n
pixivとl10n/i18n
Rubicureに学ぶメタプログラミング
Rubicureに学ぶメタプログラミング
Accept-language
Accept-language
php.js
php.js
これからの名前の話をしよう
これからの名前の話をしよう
近況の報告と自宅警備員が失職した話
近況の報告と自宅警備員が失職した話
学ばないDSL
学ばないDSL
札幌F#勉強会とは何だったのか
札幌F#勉強会とは何だったのか
tadsanとは誰か
tadsanとは誰か
DTの異常な愛情 または私は如何にして心配するのを止めてWILLCOMを愛するようになったか
DTの異常な愛情 または私は如何にして心配するのを止めてWILLCOMを愛するようになったか
PowerShell+Lisp = ? (第2回残パン会)
PowerShell+Lisp = ? (第2回残パン会)
キャンプ後の生活の変化とモチベーションの変化について
キャンプ後の生活の変化とモチベーションの変化について
関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』
After Camp 2011『今日から始める函数型プログラミング』(内容無し)
After Camp 2011『今日から始める函数型プログラミング』(内容無し)
黒歴史・闇RubyKaigi(美しいRubyと私 そして闇プログラミング)
黒歴史・闇RubyKaigi(美しいRubyと私 そして闇プログラミング)
人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHP
1.
人類の役に立たない DSL、そしていつから Rubyが最高の言語だと 錯覚してた? with PHP RubyHiroba
2014 うさみけんた@ぞ
2.
お前誰よ • うさみけんた a.k.a.
Zonu.EXE(ぞ) • Twitter: @tadsan; GitHub: @zonuexe • %r/たっ?どさん/ と呼ぶと反応します • 好き: カラオケ、アニメソング、やる夫スレ • 2012年に脱北して東京にきました
3.
お前誰よ • プログラム書いてみたいけど書けなかった • 2010年頃になんとかRubyとJavaScriptおぼえた •
趣味でやってきたので遊び気分が抜けてない • 実際に動くサービスを作るよりも、言語の仕様 とか処理系で遊んでる方が楽しかった
4.
大学を4年間で卒業できなかったけど、特に就職活動とかしてな かったから札幌のアパートを引き払って実家から大学通って卒業 までの単位数を確保しつつ札幌で証明書ベンダーでアルバイトさ せてもらってたけど諸々の経緯があり実家に引き込もることにな り自宅警備を休業して東京をぷらぷらしたあと某社の紹介で9月 から11月の予定で働くことになったけど急に10月いっぱいで引 き上げてくれとのことで連絡がきたので、だめもとだったけど後 腐れもなく現職の面接を受けて運よく無事に通ってしまったので PHPの会社に入社したのだけれど社会には闇があることは知れた し特に某社を弾劾する目的ではないので今回は特に触れません。 まあどうでもいいですね
5.
さて
6.
プログラ ミングは 楽しい
7.
コードは書 いた通り動 いてくれる
8.
構文の自由度が 高く高階函数が メソッドの文法 に組込まれてる
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 }
10.
それが人類の 役に立たない コードであっ ても楽しい
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[] スクリプト(台本)
12.
『俺より強い奴に、会いに行く』 ピンポーン リュウ「こんにちは」 たかし「はいどなた」 リュウ「いまちょっといいですか」 たかし「これから出かけます」 リュウ「午後出勤ですか?」 たかし「はい」 リュウ「強そうですね」 たかし「なにがですか」 リュウ「態度が」 リュウは、自分より強そうな奴に、会いにいったのだった。 完 台本を出力(実行結果)
13.
フリースタイルで 式指向の言語なの で、かなり自由な 位置に括弧を挿入 することができて すごいおもしろい
14.
MatzLisp!
15.
DSLを(比較 的)作りやす い(個人の感想)
16.
(予防線を張ってお くとrubyも最高の 言語ではなくもっと DSLを作りやすい言 語はいろいろある)
17.
さて
18.
プログラ ミングは 楽しい
19.
(いつからRuby が最高のプログ ラミング言語だ と錯覚してた?)
20.
Rails以後の世界 でもPHPは平然と としてでも社会に 価値を提供してる
21.
そもそも Rubyは最高 なのか?
22.
入門言語として Rubyを手放し で勧められるか
23.
オープンク ラスは本当 に最高か?
24.
無関係のライ ブラリが簡単 に衝突する
25.
標準クラスが requireしたラ イブラリに汚染 される
26.
# ruby # hoge.rb class
Hoge … #べんりライブラリ end class Array def hoge # hogeライブラリのべんり処理 end end Rubyとオープンクラス
27.
# ruby # awesome/array.rb class
Array def method_missing name, value # なんかすごい処理をしてくれる end end # awesome.rb require 'awesome/array' array.hoge.each(&:init) #なんか初期化 Rubyとオープンクラス
28.
# ruby require 'hoge' p
[1, 2, 3].hoge #=> ちゃんとうごく require 'awesome' #=> なんかエラーでる Rubyとオープンクラス
29.
最近はむやみに標準クラ スを汚染しないみたいな 空気もあるにはあるけど 紳士協定にすぎないし refinementsもあるけ ど危険を避けられてない
30.
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()); 変数には$が必須。 そもそも名前空間が別物なの で、衝突しないことは明確。
34.
map
35.
配列の要素にお なじ処理を適用 したものを返す
36.
高階函数とは? // Rubyの場合 str_to_int =
->(v){ v.to_i } ["1", "2", "3"].map( &str_to_int ) ["1", "2", "3"].map{|v| v.to_i }
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 メソッドの再利用は 実は意外にめんどい
40.
PHPにも 学びはある
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); };
44.
捕捉変数の 明示vs暗黙
45.
どちらが良い かは議論があ るところ
46.
まとめ
47.
Rubyの設計が手 放しで最高である わけではない点に ついて紹介した
48.
言語設計に王道はな く、それぞれの言語 は落としどころを見 つけながら現在の仕 様に落ち着いてる
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⌒) ./| _ノ __ノ
Télécharger maintenant