niedziela, 19 czerwca 2011

Kod, który zawsze działa!

Remember, a great way to avoid broken code is to have less of it. The code that you never write will work forever.
- Russ Olsen, "Eloquent Ruby" (Addison-Wesley Professional, 2011)

piątek, 17 czerwca 2011

Pisz "elokwentnie" w Rubym

Nie trudno nauczyć się nowego języka programowania. W końcu wszędzie mamy te same if-y, pętle, klasy, funkcje. Trochę czasu zajmuje oczywiście poznanie biblioteki standardowej i pewnych konstrukcji typowych dla danego języka.

Sztuką jednak poznać jest styl danego języka. Wiedzieć kiedy użyć danej konstrukcji, znać idiomy, zasady którymi rządzi się język.
 W innym wypadku jest duża szansa, że nie piszesz w Rubym, ale jakimś innym języku, który znałeś wcześniej. Wtedy trzeba sobie zadać pytanie: to po co udawać, że się pisze w Rubym?

Tutaj z pomocą przychodzi nam świetna książka - "Eloquent Ruby" autorstwa Russa Olsena 
It’s easy to write correct Ruby code, but to gain the fluency needed to write great Ruby code, you must go beyond syntax and absorb the “Ruby way” of thinking and problem solving. In Eloquent Ruby, Russ Olsen helps you write Ruby like true Rubyists do–so you can leverage its immense, surprising power.
Olsen draws on years of experience internalizing the Ruby culture and teaching Ruby to other programmers. He guides you to the “Ah Ha!” moments when it suddenly becomes clear why Ruby works the way it does, and how you can take advantage of this language’s elegance and expressiveness.
Eloquent Ruby starts small, answering tactical questions focused on a single statement, method, test, or bug. You’ll learn how to write code that actually looks like Ruby (not Java or C#); why Ruby has so many control structures; how to use strings, expressions, and symbols; and what dynamic typing is really good for.
Next, the book addresses bigger questions related to building methods and classes. You’ll discover why Ruby classes contain so many tiny methods, when to use operator overloading, and when to avoid it. Olsen explains how to write Ruby code that writes its own code–and why you’ll want to. He concludes with powerful project-level features and techniques ranging from gems to Domain Specific Languages.
A part of the renowned Addison-Wesley Professional Ruby Series, Eloquent Ruby will help you “put on your Ruby-colored glasses” and get results that make you a true believer.
Nie jest to książka, która wyjaśni nam podstawy programowania (co to jest zmienna, pętla czy obiekty). Autor zakłada, że znamy już trochę Ruby'ego na tyle żeby pisać poprawne (działające) programy. Jednak nie na tyle dobrze żeby pisać je poprawnie (zgodne z duchem Ruby'ego).

W sumie dopiero w trakcie lektury Ruby mnie zafascynował. Do tej pory był tylko "pośrednikiem" pomiędzy mną a Railsami, a sam w sobie mnie nie porywał.


czwartek, 16 czerwca 2011

Lepsze wsparcie dla YARD w nowym RubyMine (3.2)

Dobrze jest pisać komentarze i dokumentować kod - to wie każdy. Nowoczesne IDE potrafią dzięki dobrze zbudowanej dokumentacji lepiej podpowiadać kod (potrzebne parametry i ich typ, typ zwróconej wartości itd.)

Nowa wersja RubyMine (3.2) wprowadza lepszy support dla YARD. Sprawa jest generalnie prosta. Piszemy odpowiednio komentarze nad kodem używając składni YARD:


Dzięki czemu uzyskujemy lepsze podpowiedzi:


poniedziałek, 13 czerwca 2011

Template inheritance w Rails 3.1 - DRY niczym Briana Banks

Wielkimi krokami zbliża się wersja 3.1 frameworka Ruby on Rails, a wraz z nią wiele ciekawych ficzerów jak na przykład reversible migrations czy mountable engines. Jako genialny wynalazek zostało również wprowadzone template inheritance:
As the name implies, inherited templates make template lookup follow the controller inheritance heirarchy if it can’t find a template for the current controller.
Najłatwiej będzie to opisać fragmentami kodu.


Fragment kodu, który odpowiada za menu możemy przenieść do katalogu app/views/application, ponieważ każdy kontroler dziedziczy po ApplicationController.


Do tej pory wszystko wygląda wspaniale. Co jednak, jeżeli chcielibyśmy dodać jedną pozycję w menu np. dla NewsController? Nic prostrzego. Tworzymy app/views/news/_menu.html.erb w którym dodajemy link. Wspaniale! Co jednak, jeżeli mamy bardzo rozbudowane menu a dla jednego kontrolera chcemy dodać 1 (JEDNĄ!) pozycję? Tak! Musimy skopiować cały plik i dodać tylko ten 1 link. Don't Repeat Yourself pełną gębą.

System szablonów (nie mówię o języku szablonów, ale bardziej o tym jak działa mechanizm ich ładowania, przekazywania do nich zmiennych itd.) w Rails nigdy mnie nie powalał. Dużo bardziej podoba mi się ten znany z Django. Mamy w nim tzw. bloki. Przenosząc ten mechanizm na nasz przykład mielibyśmy blok menu w głównym szablonie (application.html.erb) i bloki rozszerzające go w poszczególnych szablonach. Wyglądałoby to mniej więcej tak:


Prawda że wygodniej, schludniej i bardziej DRY?




Briana Banks (ur. 21 maja 1978 w Monachium) - niemiecka aktorka występująca w filmach pornograficznych. [wikipedia.org] [która zdecydowanie nie jest dry (sucha) - autor]

środa, 8 czerwca 2011

Java-Szkoły i kurs 6.001 (MIT)

Jakiś czas temu przeczytałem wpis Joel'a Spolsky'ego n/t "Java-Szkół". Tych, którzy chcą zapoznać się z wpisem odsyłam do oryginału [polskie tłumaczenie]. Blogosfera zawrzała - komentarze pod każdym z wpisów, wpisy typu "What if I went to a Java school, Joel?". Ale nie o tym wpis, nie będę (przynajmniej teraz) polemizował ze zdaniem Spolsky'ego.

Joel wychwala za to kurs 6.001 Structure and Interpretation of Computer Programs
This course introduces students to the principles of computation. Upon completion of 6.001, students should be able to explain and apply the basic methods from programming languages to analyze computational systems, and to generate computational solutions to abstract problems. Substantial weekly programming assignments are an integral part of the course. This course is worth 4 Engineering Design Points.
Kurs chociaż bardzo stary (pierwsze wydanie podręcznika - 1985) jest bardzo ciekawy i warty obejrzenia. Tak, obejrzenia. Dostępne są nagrania wideo całego kursu prowadzonego przez twórców języka Scheme Guy'a L. Steele'aGerald'a Jay Sussman'a. Co prawda sam Scheme nie jest dzisiaj szeroko używany, ale coraz popularniejszy staje się inny dialekt Lisp-a - Clojure (sam dzięki 6.001 zainteresowałem się Lispem i Clojure właśnie).








Download: