Upload
kei-shiratsuchi
View
1.675
Download
0
Embed Size (px)
DESCRIPTION
オブジェクト倶楽部2010夏イベントぴちぴち若人トラックhttp://www.objectclub.jp/event/2010summer/
Citation preview
えっ、なにそれこわい
オブジェクト倶楽部2010夏イベント2010/07/16 国立オリンピック記念青少年総合センターぴちぴち若人トラック
白土 慧 @kei_s
自己紹介
白土 慧 (シラツチ ケイ)
サイジニア株式会社
id:kei-s, @kei_s
RubyKaigi2010 実行委員
サイエンスとエンジニアリング
自己紹介
白土 慧 (シラツチ ケイ)
サイジニア株式会社
id:kei-s, @kei_s
RubyKaigi2010 実行委員
自己紹介
I like ...Ruby
JavaScript
電子音楽 ( Squarepusher )
小説 ( 舞城王太郎 )
今日のお話
前半 : テクニカルなおはなし私の毎日のコーディングの中で、「えっ」と感じた「ちいさなつまづき」について、ご紹介します。
今日のお話
後半 : スピリチュアルなおはなし私の毎日の生活の中で、「なにそれこわい」と思うような「感情」について、お話します。
Ruby と JavaScript
一緒にコーディングする機会が多い
サーバサイドで Ruby を、クライアントサイドで JavaScript を書く
Ajax でデータをポスト、Ruby でデータ格納
Ruby と JavaScript
けっこう似てる!
けど、
似てるが故にはまりやすい!
Ruby と JavaScript を並行して書いているときのあるあるネタ
例1. Ajax データ処理
JavaScript ( with jQuery )
var user = {name: ‘kei_s’};
user.age = 26;
$.post(‘/user’, {data: user});
Ruby ( with Sinatra )
post ‘/user’ do
user = params
puts user.age
‘ok’
end
#=>
Ruby ( with Sinatra )
post ‘/user’ do
user = params
puts user.age
‘ok’
end
#=> NoMethodError: undefined method `age'
えっ
Ruby ( with Sinatra )
post ‘/user’ do
user = params
puts user.age
‘ok’
end
#=> NoMethodError: undefined method `age'
Ruby ( with Sinatra )
post ‘/user’ do
user = params
# puts user.age
puts user[‘age’]
‘ok’
end
#=> 26
ハッシュアクセスの違いJavaScript
hash.key //=> value
hash[‘key’] //=> value
Ruby
hash.key #=> key メソッド
hash[‘key’] #=> value
例2. 繰り返し処理
Rubyusers = [
{'age'=>22},{'age'=>26},{'age'=>31}
]
users.select{|user|
user[‘age’] < 30
}.size
#=> 2
JavaScriptvar users = [
{'age': 22},{'age': 26},{'age': 31}
];
users.filter(function(user){
user.age < 30;
}).length;
//=>
JavaScriptvar users = [
{'age': 22},{'age': 26},{'age': 31}
];
users.filter(function(user){
user.age < 30;
}).length;
//=> 0
えっ
JavaScriptvar users = [
{'age': 22},{'age': 26},{'age': 31}
];
users.filter(function(user){
user.age < 30;
}).length;
//=> 0
JavaScriptvar users = [
{'age': 22},{'age': 26},{'age': 31}
];
users.filter(function(user){
//user.age < 30;
return user.age < 30;
}).length; //=> 2
返り値の違い
JavaScript
function(){ v; } //=> undefined
function(){ return v; } //=> v
Ruby
def func() v; end #=> v
def func() return v; end #=> v
例3. イベント処理
JavaScript ( with jQuery )
$.get(‘/user.json’,
function(response){
console.log( response );
}
);
Ruby ( with Typhoeus )hydra = Typhoues::Hydra.new
request= Typhoeus::Request.new(‘/user.json’)
request.on_complete do |response|
puts response.body
end
hydra.queue request
hydra.run
JavaScript ( with jQuery )
$.get(‘/user.json’,
function(response){
console.log( response );
}
);
JavaScript ( with jQuery )
Users.prototype.store = function(response) { this.responses.push(response);};
var users = new Users();$.get(‘/user1.json’,users.store);$.get(‘/user2.json’,users.store);
Ruby ( with Typhoeus )def Users.store(response) @responses << responseendusers = Users.newrequest1 = Typhoeus::Request.new(‘/user1.json’)request2 = Typhoeus::Request.new(‘/user2.json’)
request1.on_complete(users.store)request2.on_complete(users.store)hydra.queue request1hydra.queue request2hydra.run
#=>
Ruby ( with Typhoeus )def Users.store(response) @responses << responseendusers = Users.newrequest1 = Typhoeus::Request.new(‘/user1.json’)request2 = Typhoeus::Request.new(‘/user2.json’)
request1.on_complete(users.store)request2.on_complete(users.store)hydra.queue request1hydra.queue request2hydra.run
#=> ArgumentError: wrong number of arguments (0 for 1)
えっ
Ruby ( with Typhoeus )
request.on_complete(users.store)
#=> Users#store を引数なしで実行
#=> ArgumentError: wrong number of arguments (0 for 1)
Ruby ( with Typhoeus )
def Users.store(response)
@responses << response
end
users = Users.new
request.on_complete do |response|
users.store(response)
end #=> OK
Ruby ( with Typhoeus )def Users.store(response)
@responses << response
end
users = Users.new
request.on_complete &users.method(:store)
#=> OK
request.on_complete = users.method(:store)
#=> OK (only for Typhoeus::Request)
関数オブジェクトの違いJavaScript
object.func //=> Functionオブジェクト
Ruby
object.method(:func)#=> Methodオブジェクト
object.method(:func).to_proc#=> Procオブジェクト
Ruby と JavaScript
けっこう似てる!
けど、
似てるが故にはまりやすい!
「えっ」となる感情は、なんなんだろう?=> 後半へつづく
えっ、
なにそれこわい
不安http://www.flickr.com/photos/magisterludi/405224443/
安心http://www.flickr.com/photos/delusionary/478351622/
楽しいhttp://www.flickr.com/photos/midgley/3687327166/
http://www.flickr.com/photos/hand-nor-glove/563554215/
不安はやってくる
A Jedi Master said ...
“Control, control.You must learn control.”
“Control, control.You must learn control.”
“Control, control.You must learn control.”
不安を学ぶhttp://www.flickr.com/photos/fazen/427962176/
http://www.flickr.com/photos/hand-nor-glove/626648592/
不安と向きあう
なにそれこわい
不安http://www.flickr.com/photos/magisterludi/405224443/
“Control, control.You must learn control.”
ご清聴ありがとうございました
“恐怖から逃れたければ、できるだけ早く、熊の場所【恐怖の根源】に帰らなくてはならない。