Rails 코드를 읽었습니다.

5445 단어 RubyRails

개시하다


예전부터 다양한 도서관과 사람들이 쓴 코드를 읽으며 이해하고 싶었습니다. 엔지니어로서 코드를 읽어야 했지만 읽을 때 좌절을 겪었습니다.
하지만 항목을 줄이면 자신도 읽을 수 있다.
그래서 이번에는 제가 Rails의 소스 코드를 읽을 때의 방법과 코드를 읽고 나서 좋았던 점을 정리하고 싶습니다.
Rails의 인코딩이 워낙 방대하기 때문에 평소 자주 이용하는 링크입니다.나는 to 방법의 정의원만 읽을 수 있도록 써 보려고 한다.
만약 무슨 잘못이 있으면 지적해 주세요.

독자 대상


프로그래밍을 몇 달 동안 배우기 시작한 사람.
앞으로 도서관 등의 소스 코드를 읽어보고 싶다고 말하는 사람.

코드를 읽는 장점


・이것은 다른 사람이 쓴 코드를 이해하는 연습이다.
• 방법, 산열, 조건부 등 자신이 사용하지 않았던 사용법을 알 수 있다.
• 본색을 드러낼 수 있는 상쾌함.

차리다


우선github의 원본 코드를 직접 읽는 것은 읽기 어려우므로 다음 명령으로 로컬 환경에서 원본 코드를 복제했습니다.
git clone https://github.com/rails/rails
그리고 평소에 익숙하게 편집된 복제 파일을 엽니다.
그냥 읽어보고 싶어도 git clone 정도는 아니에요. 이럴 때 Octotree라는 크롬의 확장 기능이 아주 편리해요!다음은 링크입니다.
https://chrome.google.com/webstore/detail/octotree/bkhaagjahfmjljalopjnoealnfndnagc
이것은github의 창고를 보기 쉬운 나무 구조로 만들어 사이드바를 표시하는 도구입니다.
이것을 도입하면 다음과 같이 차원 구조가 매우 이해하기 쉽다.

대략적인 틀을 잡다


rails 폴더 바로 아래에 어떤 폴더가 있는지 대충 파악해 보세요.

폴더 이름으로 무슨 관련 코드를 정리했는지 알 것 같다.
또 코드를 읽으려면 루비온 레일스 가이드https://railsguides.jp/를 참고했다.
자신은 코드만 보고 뭘 하는지 이해하기가 어려워 레일스 가이드를 읽고 어느 정도 이해한 뒤 코드를 읽었다.
그럼에도 코드의 뜻이 이해하기 어려울 때는 루비온 레일스 APIhttps://api.rubyonrails.org/를 참고해 코드를 읽는다.
Rubby on Rails API는 Ruby on Rails Guides보다 소스 코드를 기반으로 설명합니다.근데 영어야.

찾다


편집에 탑재된 검색 기능,link-사용to 방법의 정의원을 찾다.
sublimetext의 경우 command + shift + F 에 있는 폴더에서 모든 검색을 사용합니다.
검색과 관련해서는 점프 기능이 있는 루비마인 등의 편집이 매우 편리합니다.
다음 그림은 실제 모든 파일에서 검색한 결과를 캡처한 것입니다.

169 행rails/actionview/lib/action_view/helpers/url_helper.rb에서 링크나는 to 방법의 정의를 이해했다.
또한 검색 기능을 사용해도 검색 결과가 많이 나오고, 명명 규칙과 rails의 습관에 따라 많은 폴더가 있기 때문에 어느 정도 찾고 싶은 방법과 변수가 어디에 있는지 미리 예측하는 것도 중요하다.

코드를 읽다


링크to 방법의 정의 소스 코드입니다.
url_helper.rb

def link_to(name = nil, options = nil, html_options = nil, &block)
  html_options, options, name = options, name, block if block_given?
  options ||= {}

  html_options = convert_options_to_data_attributes(options, html_options)

  url = url_for(options)
  html_options["href"] ||= url

  content_tag("a", name || url, html_options, &block)
end
다음은 Ruby on Rails Guides와 Ruby on Rails API를 참고해 읽은 자신의 설명입니다.
1행: 첫 번째 파라미터에name,두 번째 파라미터에options,세 번째 파라미터에〃옵션의 네 번째 매개 변수에 Block을 설정합니다.name과 옵션은 반드시 필요한 것 같습니다. 초기 값은nil입니다.
행2: Blockgiven?블로킹 유무를 판정할 수 있다.블록이 있으면 매개변수의 내용을 다시 입력합니다.
세 번째 줄: 옵션이 nil이면 빈 산열을 되돌려줍니다.
네 번째 줄:urlfor를 사용하여 옵션에서 프로그램을 참조하는 URL을 생성하고 URL이라는 변수를 대입합니다.
다섯 번째 줄:]opti["href"]가 있으면 이 값을 되돌려주고 없으면 URL을 되돌려줍니다.
행6: 콘텐츠tag를 사용하여 html의 a 라벨을 생성했습니다.name이 없으면...동작 블록을 표시합니다.
읽는 과정에서 잘 모르는 방법과 변수가 나타나면 정의원을 반복해서 검색→읽는다.

총결산


• 프로젝트를 좁게 제한하면 프로그래밍 경력이 얕은 자신도 읽을 수 있다.
• 방법, 산열, 조건 불일치 등 자신이 사용하지 않은 용법을 알고 루비의 쓰기를 배울 수 있다.
・평소 사용하는 방법의 내용을 파악함으로써 안도감과 이해감을 가지고 그 방법을 사용할 수 있다.
・이것은 다른 사람이 쓴 코드를 이해하는 연습이다.

좋은 웹페이지 즐겨찾기