Projektowanie, Programowanie, Codzienność – BeniaminZaborski.com

15 Luty 2014

Poszukiwacze kamieni szlachetnych – Początek

Filed under: Poszukiwacze kamieni szlachetnych — Tags: , , — Beniamin Zaborski @ 18:05

W ramach samorozwoju jak i dywersyfikacji skillsów – czytaj uniezależnienia się od M$ – postanowiłem spróbować czegoś z innej bajki … innej niż .NET. W związku z tym, że nikt mnie do tego nie przymusza, a wręcz przeciwnie robię to w ramach hobby więc podstawowe założenie jest proste – ma być FUN! Duuuużo FUN-u!

Padło na RUBY!

Tak Ruby! A czemu nie?

Postanowiłem napisać cykl postów o Ruby. Ale żeby nie powielać masy informacji jakie są na temat tego języka/środowiska/platformy* (*niepotrzebne skreślić) w sieci moim założeniem jest pokazanie go z perspektywy programisty C#/.NET.

Ruby to język programowania, ale wszystkim od razu na myśl przychodzi framework do tworzenia aplikacji Web-owych Ruby on Rails. Jest wiele analogii pomiędzy C# a Rubym, a także chociażby pomiędzy ASP.NET MVC a Rails-ami. Właśnie to będę się starał przedstawić w serii moich wpisów.

Zacznijmy od razu, już teraz … oczywiście od podstaw.

Język Ruby został stworzony w 1995 roku (czyli dość dawno) przez Yukihiro Matsumoto znanego też jako Matz. Jak twierdzi autor „Ruby to dynamiczny język programowania skupiający się na prostocie i wydajności”. Ruby jest językiem interpretowanym w odróżnieniu do kompilowanego do IL języka C# na platformie .NET. Podobnie jak C# Ruby jest językiem obiektowym. Składnia Ryby-ego jest zwięzła i oparta na słowach języka angielskiego.

Jeśli to dla Was za mało i potrzebujecie intensywniejszej motywacji to fani tego języka nazywają go „pięknym i pełnym sztuki”. Chyba coś w tym jest, a może to tylko wstępne zauroczenie (?).

Jak zacząć?

Najlepiej pobrać Ruby-ego i użyć interaktywnego interpretera IRB.

Co dalej? No oczywiście nie może zabraknąć HelloWorld:). Zacznijmy od C#:

public class HelloWorld
{
  public const string TypeOfHello = "Hello";

  public string SayHello(string name)
  {
    return TypeOfHello + string.Format(" {0}", name)
  }
}

a teraz to samo w Ruby:

class HelloWorld
  TYPE_OF_HELLO = 'Hello'
  def say_hello(name)
    TYPE_OF_HELLO + " #{name}"
 end
end

Porównajmy oba listingi kodu:

1. Składnia i notacja nazewnicza

Pierwsze co się rzuca w oczy to oczywiście różnice w składni. Kod Ruby-ego jest bardziej zwięzły brak tu wydaje się zbędnych znaków np. średników na końcu linii. Preferowana notacja nazewnicza dla klas to CamelCase, dla stałych (które nie do końca są stałymi, ale o tym może innym razem) wielkie litery z podkreśleniami, a dla pozostałych składników małe listery z podkreśleniami.  Ciągi znaków w Ruby możemy zapisywać z użyciem znaków cudzysłów jak i apostrof,  jednak są pewne różnice między tymi dwoma zapisami (o tym innym razem).

2. Hermetyzacja

W Ruby klasa i jej metody domyślnie są publiczne. Wyjątkiem od tej zasady są metody initialize (coś a’la konstruktor) oraz globalne metody zdefiniowane dla klasy Object. Jest to istotna różnica w porównaniu do C# gdyż tutaj klasa domyślnie jest internal, a jej „elementy składowe” są domyślnie prywatne.

3. Typy danych

W Ruby nie określa się jawnie typów danych – interpreter języka robi to za nas. Tu nie mogę nie wspomnieć o bardzo ważnej cesze języka Ruby, mianowicie Duck Typing. Jest to specyficzny sposób rozpoznawania typu obiektu na podstawie badania metod udostępnianych przez obiekt. Skąd taka nazwa? Pochodzi ona od stwierdzenia „jeśli chodzi jak kaczka i kwacze jak kaczka, to musi być kaczką”. Każdy obiekt w Ruby posiada metodę respond_to? która pozwoli nam określić czy obiekt posiada daną metodę, np. „Tekst”.respond_to?(„downcase”). W tym wypadku otrzymamy wynik true, a downcase to po prostu metoda zamieniająca znaki ciągu na małe litery.

4. Konkatenacja ciągów znaków

Jest taka jak w C#, tj. za pomocą znaku „+”. Inna ciekawa funkcjonalność to użycie ” #{name}” co oznacza, że ciąg #{name} zostanie zastąpiony wartością zmiennej o nazwie name. Zbliżone nieco do wywołania string.Format w C#, ale dużo bardziej zwięzłe.

5. Zwracanie wyniku metody

Hmm brak jakiegokolwiek return czy coś w tym rodzaju. Bo nie jest potrzebne! Aczkolwiek można użyć słowa kluczowego return opcjonalnie.

Jak  teraz instancjonować naszą klasę i wywołać metodę? W C# po prostu:

HelloWorld hw = new HelloWorld();
hw.SayHello("Bill Gates");

a w Ruby:

hw = HelloWorld.new
hw.say_hello('Yukihiro Matsumoto')

W tym wypadku też jest nieco zwięźlej.

Tyle na początek i do następnego razu z Ruby.

Dodaj komentarz »

Brak komentarzy.

RSS feed for comments on this post. TrackBack URI

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

Blog na WordPress.com.

%d bloggers like this: