[[TableOfContents]] == RubyLanguage 소개 == RubyLanguage 소개와, 기초 문법을 설명하는 파트 1. 루비란 무엇인가 * 루비의 개발 배경 * 루비의 특징 * 루비의 역사 1. 루비와의 첫 만남 * http://www.ruby-lang.org * 루비 설치 * irb 사용법 1. 루비 써보기 * 계산기로서의 루비 * Hello World! * 간단한 코드 따라하기 == Ruby 문법 실습 == * 환경세팅하기 * [http://tryruby.org/ tryRuby] * irb * visual studio의 ironRuby * netbeans의 ruby플러그인 * eclipse ruby플러그인 * aptana (경량형 이클립스) * Hello Ruby! * 화이트스페이스는 무시 * 1- 2 * 1 -2 * 루비는 진정한 객체지향 언어다?! *루비의 모든것은 객체로써 존재한다 * 1.0/0.0 -> infinity * 123.method * "문자열".method *함수조차 nilClass의 멤버함수 * nilClass의 인스턴스는 nil하나, prototype은 없음. 다른 함수들은 가지고있음 * 멤버변수도 객체, 객체안의 객체! * 내부속성 class * 루비의 신기한 배열. 음의 인덱스를 가질 수 있다 * [http://www.ruby-lang.org/ko/documentation/quickstart/ 루비 퀵가이드] * Ruby.new * 이제 객체를 만들어보자 * 루비에서는 클래스명이 대문자로 시작해야한다!(아니면 에러) * 루비의 변수명 선언 규칙 * initialize 함수로 객체 선언하기 * 루비의 생성자 initialize. ( 디폴트 생성자가 있나봄) class Some def initialize # init variables end end * 멤버변수 선언하기(@) def initialize @var # this is the way how declaring variable end * 루비는 객체의 동적인 변경이 가능하다! * 이미 생성된 인스턴스에 멤버함수 추가하기 class Some def initialize # init variables end end def Some.function # dynamic function declare end * 상속 class Some2 < Some def initialize # this is overriding end end * 함수의 오버라이딩 * 부모 클래스를 동적 변경하면, 자식 클래스의 인스턴스는 어떻게 될까? Some2.function2 # undefined method def Some.function2 # new function end Some.function2 # works! * 루비의 클래스/메소드 체이닝을 가르칠까요? * superclass * attr_reader/attr_writer * 메서드를 만들어보자! (루비는 return문이 없어도 돼) * 맨 마지막 연산식의 결과가 리턴됨 * 메서드는 {} 대신 def/end로 * 루비의 함수는 () 생략가능! * 문자열 반복출력 메소드 만들어보기 * while * do/while * for * 블럭을 이용한 반복자 함수 * 루비의 블럭 넘기기 {| parameters| do something with parameters..} yield : get the block and run it a = [1, 2, 3, 4, 5] a.each {|x| puts x+1} # bloack은 복사 전달인가?(maybe) * 기본 입출력 * 입력받은 문자열 반복 출력해보기 * 입력 <- gets * 출력 <- puts, print * 정규표현식(생략하는게 나을 듯) * 예외처리하기 (세번째 세미나에서 필요할까?) * if/else로 예외 처리해보자 * rescue로 만들기 * 유닛테스트(생략가능) * 상속을 통한 테스트 케이스 만들기 UnitTest:: * 여러분은 이제 루비 유저입니다! * 자축 DeleteMe) 여백이 이상하네요.. 세미나 끝나고 고칠게요ㅜ == Ruby로 만들어보기 == * [http://rubyforge.org/frs/?group_id=1109 RRobots]를 이용한 RubyLanguage Robocode * 를 하려고 했지만 tcl 문제로 CodeRace로 변경 * Pair Programming : Pair를 밸런스에 맞게 짜드림. * '''레이튼 교수와 함께하는 CodeRace''' * A마을에서 B마을로 가려면 강을 건너야한다. * 배를 타고 두 마을 사이를 오갈 수 있다. * Step 1 * 레이튼 교수가 배를 타고 건너 B마을로 건너가게 하자. * 평가 * 레이튼 교수가 A마을에서 B마을로 건너갈 수 있는지 본다. * 예제 {{{ class Layton def initialize @location = 'A' end def crossRiver printLocation @location = 'B' print " -> " printLocation print "\n" end def printLocation print @location end end }}} == 회고 == * Snowball Keyword * Winner : [송지원], [황현] || 이름 || Keyword || 이유 || 비고 || || [권순의] || 우아하다 ||성현이가 Ruby를 우아한 언어라고 소개함. 지혜가 책에서 $_가 우아하다는 표현을 봤다고 말함. || || || [송지원] || 불완전하다 || || || || [김준석] || || || 탈락 || || [윤종하] || ifelse || 이거밖에 못 들어서 || 탈락 || || [임상현] || || || || || [황현] || || || || || [정의정] || || || || || [강소현] || 페챠쿠챠 || 성현(2)의 페챠쿠챠는 불완전하다함ㅋ 주제 벗어남ㅠ || 탈락 || || [권순의] || || || 탈락 || || [송지원] || || || || || [임상현] || || || || || [황현] || || || || || [정의정] || || || || ---- 추후수정합니다. 다른 보시는 분들도 기억나시는대로 수정 or 추가해주세요. - [김수경] == 후기 == * "우아한" 언어인 루비를 다운받아 irb를 사용해 실습을 해보았다. 처음에 irb를 눌렀을 때, 무슨 dll파일이 없어서 실행이 안된다는 팝업창이 떴는데 확인 누르니까 알아서 잘 켜졌다. Ctrl+C를 눌렀더니 끌지 말지 여부가 떴는데 N을 눌러도 꺼졌다. irb보다는 넷빈즈를 이용하는게 좋다는 말이 와닿았다. 1+2를 치면 알아서 3이 나오는 것과 리턴 값이 항상 표시되는 것이 신기했다(없을 경우도 =>nil 로!). 루비의 블록 넘기기는 #define이랑 비슷한 느낌이 들었다. 새로운 언어임에도 쉽게 익힐 수 있어 좋았다. 하지만, 페어로 하는 만큼 실습 시간도 반감되지 않았을까 죄송스러웠다. 세미나 공지가 뜨면 노트북을 가져가도록 해야겠다. -[강소현] ㄴ아.. 세미나가 끝나니까 할말이 생각나네요..ㅠㅠ 루비의 블록 넘기기는 사실 블록이 yield구문에게 전달되는 것이 아니라 yield를 만나면 함수의 호출부로 컨트롤이 이동해 블록이 있는지 확인하고 실행합니다. 책에서는 co-routine 이라고 이해하면 된다는 설명이 있어요~ 블록이 전달되는게 아니라 컨트롤 플로우가 왔다갔다!! 스위치 태스킹처럼요. 세미나때 설명을 잘 해드렸어야 했는데 죄송천만번입니다 - [서지혜] ---- [Ruby/2011년스터디]