Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Khám phá bên trong Ruby Gem: Hướng dẫn cho nhà phát triển

Khi bạn xây dựng ứng dụng Rails, bạn sẽ dùng đống gem. Một số trong chúng dường như hoàn toàn thần kỳ! Nhưng phép màu đó xảy ra như thế nào?

Trong hầu hết gem, không có gì là những gì bạn không thể làm. Đó chỉ là mã Ruby. Đôi khi nó là mã Ruby phức tạp. Nhưng nếu bạn khám phá mã đó, bạn sẽ bắt đầu hiểu phép màu đó đến từ đâu.

Tìm source code

Để hiểu gem hoạt động như thế nào, bạn phải tìm mã của nó.

Nếu có một phương thức bạn muốn biết thêm, bạn có cách dễ dàng để tìm source: method và source_location. Tôi đã viết một chút về những cái này trước đây. Đây là ví dụ:

irb(main):001:0> ActiveRecord::Base.method(:find).source_location => ["/usr/local/lib/ruby/gems/2.1.0/gems/ activerecord-4.2.0.beta4/lib/active_record/core.rb", 127]

Nhưng nếu bạn quan tâm hơn một phương thức?

Nếu bạn có console mở bên trong thư mục ứng dụng Rails của bạn, bạn có thể đi thẳng đến mã gem:

~/Source/gem_example[master] jweiss$ bundle open rack

Nếu nó trong Gemfile của bạn, bundle open rack sẽ mở toàn bộ gem rack trong editor của bạn. Bạn thoải mái duyệt tất cả file bên trong nó.

Bạn bắt đầu ở đâu?

Bây giờ bạn biết mã gem ở đâu, bạn bắt đầu hiểu nó như thế nào?

Nếu bạn cố gắng học cách activerecord hoạt động bằng cách đọc lib/active_record.rb, bạn không đi đâu được. Bạn chỉ sẽ tìm thấy một đống autoload và require.

Dễ nhất hiểu gem sau khi ứng dụng của bạn dùng nó một chút. Một khi bạn biết nhiều hơn về loại công việc gem đang làm cho bạn. Bằng cách đó, bạn đã có ý tưởng về lớp và phương thức thú vị nào bạn nên bắt đầu.

Sau khi bạn có tên một vài phương thức thú vị, bạn có thể dùng source_location, Find in Project trong editor, hoặc ag trên dòng lệnh để xem những phương thức đó được định nghĩa ở đâu. Và đó là lúc vui bắt đầu.

Mã gem nằm trên máy của bạn, phải không? Điều đó nghĩa là bạn có thể thay đổi nó bất cứ cách nào bạn muốn! Bạn thậm chí có thể phá vỡ nó, và không ai khác phải biết.

Khi tôi cố gắng hiểu gem hoạt động như thế nào, tôi không chỉ đọc mã. Tôi thêm câu lệnh puts vào gem, tôi ném exception để tìm ra ứng dụng của tôi đến những dòng đó như thế nào, và tôi chỉnh sửa mã để hiểu tại sao tác giả viết nó như vậy.

Một khi bạn biết thủ thuật được làm như thế nào, nó ít thần kỳ hơn nhiều. Và bạn sẽ không phải đoán mã đó sẽ hành động như thế nào trong tình huống lạ, vì bạn sẽ có thể thấy nó với chính mắt mình.

Dọn dẹp sau khi xong

Sau khi bạn chỉnh sửa mã gem, ứng dụng của bạn có thể ở trạng thái 꽤 tệ. Nó có thể thậm chí không chạy nữa! Và ngay cả nếu nó chạy, nó sẽ spam tất cả những câu lệnh puts bạn thêm vào console.

Nhưng RubyGems có cách nhanh để đưa mọi thứ về bình thường:

~ jweiss$ gem pristine activerecord -v 4.2.0 Restoring gems to pristine condition... Restored activerecord-4.2.0

Hoặc, nếu bạn không nhớ gem nào bạn đã chỉnh sửa, và bạn rất kiên nhẫn:

~ jweiss$ gem pristine --all

Sau đó, tất cả gem của bạn sẽ trở lại như lúc bạn cài đặt chúng.

Bạn sẽ khám phá gì?

Khi bạn tìm, đọc, và khám phá mã bên trong gem của bạn, bạn sẽ hiểu mã bạn phụ thuộc ở cấp độ sâu hơn. Và bạn sẽ không phải dựa vào giả định và đoán mò nữa.

Bài đăng này ban đầu được gửi độc quyền cho danh sách của tôi. Để nhận thêm bài đăng như thế trong inbox mỗi thứ Sáu, đăng ký ở đây!