Any fool can make things bigger, more complex, and more violent. It takes a touch of genius and a lot of courage to move in the opposite direction. Albert Einstein

o Ruby

You can write FORTRAN in any language

27 komentarzy | Kategorie: Programowanie, Ruby, Techblog | trackback
Tagi:

For english version of this post go here: http://blog.aenima.pl/2008/4/14/you-can-write-fortran-in-any-language.

You can write FORTRAN in any language

A language that doesn’t affect the way you think about programming is not worth knowing

Możesz pisać kod C w Rubym

Car = Struct.new(:model, :color, :opt)

CAR_MODEL_BWM       = 0
CAR_MODEL_AUDI      = 1

CAR_OPT_GAS         = 0x01
CAR_OPT_AIR_COND    = 0x02
CAR_OPT_ROOF_RACK   = 0x04

CAR_COLOR_BLACK     = 0
CAR_COLOR_RED       = 1
CAR_COLOR_GREEN     = 3
CAR_COLOR_BLUE      = 4
CAR_COLOR_WHITE     = 5

CAR_MODEL_NAMES = [
  "BMW",
  "AUDI"
]

CAR_COLOR_NAMES = [
  "black",
  "red",
  "green",
  "blue",
  "white"
]

def car_create(model, color, opt = 0)
  car = Car.new
  car.model = model
  car.color = color
  car.opt   = opt
  return car
end

def car_print(car)
  printf("[Car] model: %s, color: %s\n", CAR_MODEL_NAMES[car.model], CAR_COLOR_NAMES[car.color])
  printf("Options: \n")
  if car_has_gas(car)
    printf(" - gas\n")
  end
  if car_has_air_cond(car)
    printf(" - air condition\n")
  end
  if car_has_roof_rack(car)
    printf(" - roof rack\n")
  end
end

def car_max_speed(car)
  case car.model
  when CAR_MODEL_AUDI
    return 200
  when CAR_MODEL_BWM
    return 220
  else
    return -1
  end
end

def car_has_gas(car)
  return (car.opt & CAR_OPT_GAS) != 0
end

def car_has_air_cond(car)
  return (car.opt & CAR_OPT_AIR_COND) != 0
end

def car_has_roof_rack(car)
  return (car.opt & CAR_OPT_ROOF_RACK) != 0
end

car = car_create(CAR_MODEL_BWM, CAR_COLOR_BLACK, CAR_OPT_AIR_COND)
car_print(car)

Możesz pisać kod Javy w Rubym

class User
  def initialize(name, age)
    self.setName(name);
    self.setAge(age);
  end
  
  def setName(name)
    @name = name;
  end
  
  def getName()
    return @name;
  end
  
  def setAge(age)
    @age = age;
  end
  
  def getAge()
    return @age;
  end
end

class Iterator
  def initialize(array)
    @index = 0;
    @array = array
  end
  
  def hasNext()
    return @index < @array.length();
  end
  
  def getNext()
    @index += 1;
    return @array[@index - 1];
  end
end

array = [User.new("john", 20), User.new("ala", 30), User.new("dave", 15)];
it = Iterator.new(array);
while (it.hasNext())
  user = it.getNext();
  puts("Name: " + user.getName() + ", Age: " + user.getAge().to_s());
end

Możesz pisać kod Perla w Rubym

while gets
  chomp
  next if /^#/ or /^!/
  break if /quit/
  
  if /(\d+)/
    print $1
  end
end

Więc jeśli chcesz programować w Rubym to naucz się dobrze tego języka. Ucz się go tak długo, aż poznasz jego styl, sposób myślenia, wszelkie niuanse. A potem pisz w nim swoje programy stosując idiomy, niepisane zasady, sposób nazewnictwa. Nie przestawaj dopóki nie będziesz wiedzieć o nim prawie wszystkiego. Wiedz dokładnie jak działa mechanizm metod prywatnych/chronionych/publicznych, sposób szukania metody, która zostanie wywołana, miksiny, include, extend, metaklasy itd... Doświadcz, że bez typowania statycznego da się żyć, że meta-programowanie to użyteczna technika (a zarazem niebezpieczna). 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?

Jeśli spodobał Ci się wpis to może umieścisz ten blog w swoim czytniku RSS?

Komentarze

1. avatar icon mh napisał(a) 14 Kwi 2008 o godz. 10:00:

Jeszcze tylko brakuje:
‘Mozesz pisac kod Ruby w Rubym’

2. avatar icon Tomash napisał(a) 14 Kwi 2008 o godz. 10:43:

Mistrzostwo wszechświata :D
Przetłumacz to na inglisz i diggujemy/redditujemy!
Ewentualnie – mogę to przetłumaczyć i wrzucić na nasz firmowy (aenimowy) rubiowy blog anglojęzyczny, oczywiście z wyraźnym podaniem źródła i linka do oryginału? :)

3. avatar icon Radarek napisał(a) 14 Kwi 2008 o godz. 10:53:

@Tomash, nie ma problemu. Bierz, tłumacz i publikuj :). Jak ktoś ma jeszcze pomysły na inne języki to śmiało pisać.

4. avatar icon Tomash napisał(a) 14 Kwi 2008 o godz. 11:36:

Done.
Od miesięcy namawiałem chłopaków na postawienie „firmowego” bloga o Rubym i okolicach. Sam go wreszcie postawiłem (Mephisto) i muszę najwyraźniej rozkręcić, żeby szanowni coś od siebie dopisali – jeszcze dziś dodam relację z Euruko, bo tak wisi i wisi zajawka :)

W każdym razie tłumaczenie – pozwoliłem sobie trochę zaingerować w końcówkę – jest tutaj:
http://blog.gekon.aenima.pl/2008/4/14/you-can-write-fortran-in-any-language
Mam nadzieję, że „acknowledges” Cię satysfakcjonują? ;)

5. avatar icon Radarek napisał(a) 14 Kwi 2008 o godz. 11:39:

@Tomash, jest ok. Wersja angielska mi się bardziej podoba :).

6. avatar icon Tomash napisał(a) 14 Kwi 2008 o godz. 11:39:

Dzięki :D
Zawsze możesz podlinkować „english version here” ;)

7. avatar icon Radarek napisał(a) 14 Kwi 2008 o godz. 11:40:

Tak też zrobię :).

8. avatar icon Tomash napisał(a) 14 Kwi 2008 o godz. 11:40:

PS. Kurna, Radarek, czemu nie mieszkasz w Warszawie. Nam tu ogarniętych Rubiowców brakuje ;)

9. avatar icon Seban napisał(a) 14 Kwi 2008 o godz. 18:53:

Dobry tekst. Tomasz ogarniętych to chyba wszędzie brakuje.

10. avatar icon Psi napisał(a) 14 Kwi 2008 o godz. 19:17:

Tomash: nic prostszego, przeprowadź się do Krakowa, tutaj nas jest sporo ;-)

11. avatar icon Tomash napisał(a) 14 Kwi 2008 o godz. 23:34:

Ja wiem, że krakowskie środowisko programistów Ruby jest największe w Polsce – ale ciężko w Wawie pracujemy (także u podstaw – to robię u siebie na wydziale:
http://www.knf.pw.edu.pl/~trs/szkolenie/ )
żeby Was dogonić ;)

12. avatar icon JO napisał(a) 22 Kwi 2008 o godz. 21:59:

To też przerywnik jak PHP_RAILS :D ?

13. avatar icon Radarek napisał(a) 22 Kwi 2008 o godz. 22:04:

@JO: nie, ten wpis jest jak najbardziej serio. Wydaje się, że to taka głupota, ale ma głębsze znaczenie (taki przynajmniej był cel). Główne przesłanie „to, że używasz składni danego języka nie znaczy, że programujesz w nim”.

14. avatar icon JO napisał(a) 22 Kwi 2008 o godz. 22:07:

Nie mówie że to złe, tylko pomyśl jakby ktoś z twojego teamu nagle zaczął cisnąć w projekcie składnią Perl’a wtedy nie pomoże nawet jak Jarosław Z. mu zabroni.

Mi się podoba możliwość i tekst, tylko czasami zbyt dużo możliwosć == śmierc :D

15. avatar icon Radarek napisał(a) 22 Kwi 2008 o godz. 22:15:

Ale sęk w tym, że używanie danego stylu programistycznego (np. przykład z Javą) z innego języka jest złe jeśli kłóci się z ogólnie przyjętym stylem (który trochę narzuca sam język i trochę społeczność, która z czasem tworzy dany styl). Tym bardziej jeśli kod ma czytać, rozwijać ktoś inny.

Przykłady właśnie miały pokazać, że możliwość istnieje, ale nie znaczy to, że należy z nich korzystać. I nie odnosi się to tylko do Rubiego.

16. avatar icon JO napisał(a) 22 Kwi 2008 o godz. 22:17:

Masz rację, tylko że to co teraz napisałeś to taka prawda jak to że białe jest białe :) W sensie każdy normalny człowiek jest tego w 100% świadomy.

17. avatar icon Radarek napisał(a) 22 Kwi 2008 o godz. 22:18:

Wnioskuję więc, że spora część jest nienormalna :).

18. avatar icon JO napisał(a) 22 Kwi 2008 o godz. 22:20:

Może tam u was :D Na dalekim wschodzie, zachodzie , północy czy południu :D Bo u nas to przeważnie tacy kumaci :)

19. avatar icon Radarek napisał(a) 22 Kwi 2008 o godz. 22:23:

I dlatego ogólnie mówi się, że jest niedobór dobrych programistów?:)

20. avatar icon JO napisał(a) 22 Kwi 2008 o godz. 22:24:

Przyjmij moje zaproszenie na jabberze bo ci tu zasypiemy wątek śmieciami :D

21. avatar icon Sebastian Nowak napisał(a) 22 Kwi 2008 o godz. 22:24:

Ale ja tak z boku sobie czytam ;-)

22. avatar icon Musk napisał(a) 06 Maj 2008 o godz. 18:34:

Mało zaskakujące, ale dobry tekst.

23. avatar icon Moarc/J-23 napisał(a) 09 Lis 2008 o godz. 16:56:

Ostatni przykład kodu kompletnie nieczytelny w porównaniu z prawdziwym Perlem :P

24. avatar icon Tomash napisał(a) 12 Sty 2009 o godz. 13:45:

Radarek, wybacz zawracanie gitary po raz kolejny w tej samej sprawie, ale mam prośbę o zmianę linka na
http://blog.aenima.pl/2008/4/14/you-can-write-fortran-in-any-language
(czyli wywalenie .gekon ze ścieżki – blog się dorobił dopięcia do top-level domeny ;) )

25. avatar icon Michal Papis napisał(a) 14 Lut 2009 o godz. 02:11:

hym stare ale jare, można pisać w wielu językach, ale bez znajomości stylu napiszemy śmiecia (eng. trash) no właśnie link z początku strony (i ostatniego posta nie działa)

26. avatar icon Vitro napisał(a) 16 Mar 2009 o godz. 22:26:

Twoja notka nie tyle dobrze uzupełnia mój wpis, ale nawet lepiej wyraża to, co miałem na myśli!
Dziękuję za odwiedziny i wpadaj częściej:)! Przy okazji zasubskrybowałem Twojego bloga, gdyż naprawdę zacnie piszesz. I bardzo szybko mi ta subskrypcja wyszła na dobre — już zdążyłem z kodu strony zapożyczyć sensowny plugin wordpressowy do podświetlania składni Ruby :>.

Pozdrawiam!

PS. Jabbera masz w contact page, a najwidoczniej nie używasz :>

27. avatar icon MyNetFaves : Web 2.0 Social Bo napisał(a) 28 Maj 2009 o godz. 05:35:

MyNetFaves : Public Faves Tagged Programy

Marked your site as programy at MyNetFaves!

Dodaj coś od siebie

Możesz korzystać ze składni Textile.

Pola oznaczone * są wymagane.

Proszę o dodawanie komentarzy związanych z tematem postu, sprawy osobiste proszę załatwiać przez maila bądź gg.

Zastrzegam sobie prawo do moderacji komentarzy (edycja, usuwanie).