Upload
naver-d2
View
2.520
Download
2
Embed Size (px)
DESCRIPTION
Citation preview
루비는����������� ������������������ 패셔니스타
문추근
KT����������� ������������������ Hitel����������� ������������������ /����������� ������������������ Web����������� ������������������ 플랫폼����������� ������������������ Lab
2006 ~ 20112011
Text
http://www.flickr.com/photos/dixieroadrash/3429742001
루비는����������� ������������������ 패셔니스타
1. 루비
1.1. 철학
1.2. 특징
1.3. 영향
2. 레일스
2.1. 특징
2.2. 영향
3. 루비����������� ������������������ 파생상품
4. 루비와����������� ������������������ 레일스의����������� ������������������ 활용
5. 배워야����������� ������������������ 하는����������� ������������������ 이유
Ruby1995 Yukihiro Matsumoto (Matz)
More powerful than Perl More object oriented than Python
Ruby is designed to make programmers happy
be human-oriented
make programming fun
루비의����������� ������������������ 특징
객체����������� ������������������ 지향����������� ������������������ 프로그래밍
객체
자료 행동
객체
행동
모두����������� ������������������ 다����������� ������������������ 객체
모두����������� ������������������ 다����������� ������������������ 객체
-1.23.abs
'Hello'.reverse
true.methods
['c', 'a', 'b'].sort
nil.nil?
// JavaScript - Chai.js
foo.should.have.length(3);
expect(foo).to.have.length(3);
// Java
if (foo.equals("hi")) { ... }
if ("hi".equals(foo)) { ... }
모두����������� ������������������ 다����������� ������������������ 객체
# Ruby
[1, 2, 3].max
foo.empty?
// JavaScript
Math.max(1, 2, 3);
!foo
모두����������� ������������������ 다����������� ������������������ 객체
유연함
3.days.since Date.yesterday
(1.year + 6.months).ago
'person'.pluralize
=> 'people'
'ILoveYou'.underscore.humanize
=> 'I love you'
class Date
def yesterday
self - 1
end
end
class Integer
def months
Duration.new self * 30.days
end
end
몽키����������� ������������������ 패치
class User attr_accessor :email
def initialize(email) @email = email endend
class User def initialize(email) @email = email end
def email @email end def email=(email) @email = email endend
메타����������� ������������������ 프로그래밍
메타����������� ������������������ 프로그래밍
def attr_accessor *args args.each do |arg| self.class_eval "def #{arg};@#{arg};end" self.class_eval "def #{arg}=(val);@#{arg}=val;end" endend
블록
# Rubynumbers.each do |n| n.do_somethingend
// JavaScriptfor (var i = 0; i < numbers; i++) { var n = numbers[i]; doSomething(n);}
블록
(1..10).each do |i|
print i
end
3.times {|i| puts i}
블록
Enumerable
all?
any?
chunk
collect
collect_concat
count
cycle
detect
drop
drop_while
each_cons
each_entry
each_slice
each_with_index
each_with_object
entries
find
find_all
find_index
first
flat_map
grep
group_by
include?
inject
map
max
max_by
member?
min
min_by
minmax
minmax_by
none?
one?
partition
reduce
reject
reverse_each
select
slice_before
sort
sort_by
take
take_while
to_a
zip
약속
약속
puts 'hello'
nil? empty? exist? directory?
[1, 2, 3].sort[1, 2, 3].sort!
$global_variable@instance_variable@@class_variableCONST
루비의����������� ������������������ 영향
Ruby on Rails2004 by David Heinemeier Hansson (DHH)
/users
Router
Controller
ModelView
index
@users
User.all
SQL Query
레일스의����������� ������������������ 특징
Scaffold
Scaffold
• $ rails generate scaffold post title:string content:text
• Database����������� ������������������ Migration
• Model
• Controller
• View
• Route
• CoffeeScript
• SCSS
• Test
http://en.wikipedia.org/wiki/Scaffold
RESTful
REpresentational����������� ������������������ State����������� ������������������ Transfer
RESTful
Method URL Action
GET /posts index
POST /posts create
GET /posts/new new
GET /posts/:id/edit edit
GET /posts/:id show
PUT /posts/:id update
DELETE /posts/:id destroy
레일스의����������� ������������������ 영향
• Model
• Controller
• Router
루비����������� ������������������ 파생상품
# hello.rb
require ‘sinatra’
get ‘/’ do ‘Hello world!’
end
$ ruby hello.rb
루비와����������� ������������������ 레일스의����������� ������������������ 활용
루비의����������� ������������������ 활용
• Homebrew
• Rake
• Backbone
• Underscore
• Zepto
• Angular
• Jasmine
• Mustache
• Prototype
• BDD
레일스
• Wunderkit
• Hulu
• Groupon
• GitHub
• Shopify
• Scribd
• Diaspora
• Code����������� ������������������ School
한국에서는����������� ������������������ 왕따
http://anime.desktopnexus.com/wallpaper/718281/
등가교환의����������� ������������������ 법칙
무언가를����������� ������������������ 얻기����������� ������������������ 위해서는����������� ������������������ 그와����������� ������������������ 동등한����������� ������������������ 대가가����������� ������������������ 필요하다
모바일����������� ������������������ 시대
• 개발����������� ������������������ 속도가����������� ������������������ 더����������� ������������������ 중요한����������� ������������������ 서비스
• MVC����������� ������������������ is����������� ������������������ dead
• 뷰가����������� ������������������ 중요하지����������� ������������������ 않은����������� ������������������ 시대
• API����������� ������������������ 중심����������� ������������������ 서버
• RESTful
배워야����������� ������������������ 하는����������� ������������������ 이유
매년����������� ������������������ 새로운����������� ������������������ 언어를����������� ������������������ 배워라
• 실용주의����������� ������������������ 프로그래머����������� ������������������ Tip����������� ������������������ #8
• 지식����������� ������������������ 포트폴리오에����������� ������������������ 주기적으로����������� ������������������ 투자하라.
• 다른����������� ������������������ 언어는����������� ������������������ 동일한����������� ������������������ 문제를����������� ������������������ 다르게����������� ������������������ 푼다.
1����������� ������������������ ~����������� ������������������ 10����������� ������������������ 가운데����������� ������������������ 짝수를����������� ������������������ 배열로
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]odds = []
C
int numbers[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int result[10];int i = 0;int j = 0;
for (i = 0; i < 10; i++) { int n = numbers[i];
if (n % 2 == 0) { result[j++] = n; }}
JavaScript
var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];var result = [];var i = 0;var j = 0;
for (i = 0; i < 10; i++) { var n = numbers[i];
if (n % 2 == 0) { result[j++] = n; }}
Python
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]result = []
for number in numbers: if n % 2 == 0: result.append(n)
Ruby
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]result = []
for number in numbers if n % 2 == 0 result.push(n) endend
JavaScript
var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// ECMAScript 5, IE9+var result = numbers.filter(function(n) { return n % 2 == 0;});
// jQueryvar result = $.grep(numbers, function(n) { return n % 2 == 0;});
Python
[n for n in range(1, 11) if n % 2 == 0]
Ruby
(1..10).select {|n| n % 2 == 0}
언어의����������� ������������������ 한계가����������� ������������������ 곧����������� ������������������ 자기����������� ������������������ 세계의����������� ������������������ 한계다
루트비히����������� ������������������ 비트겐슈타인