💎Ruby의 철학
"스트레스가 없는 쉬운 프로그래밍을 지향하고 우리의 삶을 반영해야 하며, 프로그래밍 언어는 컴퓨터가 아닌, 인간 중심으로 설계되어야 한다."
💎 루비 학습 자료
- 루비 게임으로 배우기!
Ruby를 재미있게 배워볼 수 있는 게임 사이트. ‘Ruby Warrior’. Ruby 언어로 캐릭터를 조작해서 던전을 클리어 하는 게임.- 루비 20분 가이드(한국어)
- 루비 초보자를 위한 튜토리얼
루비의 장점1
: Ruby는 간결함과 생산성이 강조된 언어입니다. 그렇기 때문에 어느 정도 익숙해지면 개발하는 속도가 매우 빠름. 웹사이트를 만들려고 할 때, 가장 빨리 만들 수 있는 언어가 바로 Ruby라고함.루비의 장점2
: Ruby의 최대 장점은 확장성과 이식성이 매우 높다는 것. 그렇기 때문에 유지보수에 드는 노력 또한 매우 절약해줌. Python이나 JavaScript 등 다른 언어로 개발된 라이브러리를 Ruby 위에 구현할 수도 있음.아래 영상 15분부터 ~ 루비를 쓰면 얼마나 빨리 개발이 가능한 지 보여줌.
루비의 최대 단점
: 속도가 느림. 아예 대규모 서비스에서는 실행 속도 측면에서 걸리기 때문에 이용하기 어려움. 협업이 필요한 대형 프로젝트에서는 Ruby가 쓰이기 부적합함.
결론
: 웹사이트를 쉽고 빠르게 만들 수 있기 때문에 동접자가 많지 않은 간단한 사이트를 구축할 때, 프로토타입을 만들 때 이용하는 것이 좋음. 스타트업처럼 빠르게 작은 서비스를 자주 출시해서 소비자의 반응을 봐야 할 때 이용하기 가장 좋은 언어. 고객 중심의 서비스를 보다 빨리 개발하는 데에 목적이 있다면, 적합한 환경.
Ruby on Rails
는 Ruby의 웹 프로그래밍 프레임워크
대부분의 초기 스타트업 사이트, Github이나 Twitter도 Ruby로 만들어졌음. 규모가 커지면 Java기반의 언어 등으로 갈아탐.
루비에는 당신이 입력한 루비 구문을 바로 결과로 보여주는 프로그램이 동봉되어 있습니다. 대화형 세션에서 루비 코드를 가지고 노는 것은 루비를 배울 수 있는 훌륭한 방법입니다!
irb
는 Interactive Ruby
의 약자!irb
quit
또는 exit
이라고 입력하거나 Ctrl-D
✅ =>nil
이 mojo? 사람 이름인줄......
puts
명령어는 언제나 nil
을 반환합니다. 루비에서의 nil
은 절대적으로 아무것도 없는(absolutely-positively-nothing) 값입니다.irb(main):010:0> def h
irb(main):011:1> puts "Hello World!"
irb(main):012:1> end
=> :h
irb(main):013:0> h
Hello World!
=> nil
irb(main):014:0> h()
Hello World!
=> nil
irb(main):015:0> def h(name)
irb(main):016:1> puts "Hello #{name}!"
irb(main):017:1> end
=> :h
irb(main):018:0> h("Matz")
Hello Matz!
=> nil
irb(main):019:0> def h(name = "World")
irb(main):020:1> puts "Hello #{name.capitalize}!"
irb(main):021:1> end
=> :h
irb(main):022:0> h "chris"
Hello Chris!
=> nil
irb(main):023:0> h
Hello World!
=> nil
다른 프로그래밍 언어에서 for
반복문을 사용해 리스트의 내용물을 아래처럼 처리하는 것
for (i=0; i<number_of_elements; i++)
{
do_something_with(element[i]);
}
루비에서는 이렇게 한다.
임시변수인 i가 필요하지 않고, 리스트의 길이를 계산하지 않아도 됨. 핵심적이지 않은 코드는 each 안에 숨겨버렸음. 각 내용물을 가지고 무엇을 할 것인지만 정하면 됨.
@names.each do |name|
puts "Hello #{name}!"
end
# each는 코드블록을 넘겨 받아 리스트의 각 원소에 순차적으로 적용시키는 메서드.
# do와 end 사이의 코드가 블록. 블록은 익명함수 또는 lambda와 유사.
# 두개의 | 사이의 변수는 이 블록에 넘겨지는 매개변수
뿐만 아니라 각종 셋업 코드, 에러처리를 모두 사용자가 신경쓰지 않아도 되도록 해줌.
# Say bye to everybody
def say_bye
if @names.nil?
puts "..."
elsif @names.respond_to?("join")
# Join the list elements with commas
puts "Goodbye #{@names.join(", ")}. Come back soon!"
else
puts "Goodbye #{@names}. Come back soon!"
end
end
# say_bye 메서드는 each 메서드를 사용하지 않는다.
# ay_bye 메서드는 단지 @names가 join 메서드를 가졌는지 확인하고, 가지고 있다면 join 하고 있다.
# 그렇지 않다면, 변수를 문자열로 출력만 한다.
# 이 메서드는 변수의 실제 타입은 신경을 쓰지 않는다.
# 이처럼 단지 어떤 메서드만을 가지고 있는지에 의존하는 것을 덕 타이핑(Duck Typing)이라고 부름.
# “만약 오리처럼 걷고 오리처럼 꽥꽥거리면…”
# 이런 방식의 장점은 어떤 타입의 변수를 지원할 것인지를 제한할 필요가 없다는 것.
# 만약 새로운 종류의 list 클래스를 정의했다고 해도, 거기에 join 메서드만 정의되어 있으면 잘 동작함..
루비도 뿌수자고요~~