Programowanie w Ruby od podstaw - kurs wideo PL

To, że nie należy (być może) głośno o tym mówić nie znaczy, że należy mówić jawne bzdury (że w nazwie metod nie może być wielkich liter).

Zanim zaczniesz pisać o “jawnych bzdurach” odpowiedz na krótkie pytanie: Wiesz czy wydaje Ci się, że wiesz?

irb(main):001:0> def Tomek
irb(main):002:1> puts “ala”
irb(main):003:1> end
=> nil
irb(main):004:0> Tomek
NameError: uninitialized constant Tomek
        from (irb):4
        from C:/Ruby200-x64/bin/irb:12:in `’
irb(main):005:0> def tomek
irb(main):006:1> puts “ala”
irb(main):007:1> end
=> nil
irb(main):008:0> tomek
ala
=> nil
irb(main):009:0>

2 Likes

Dokładnie tak :smile:

czyli udało nam sie ustalic, ze metoda moze zaczynac sie od duzej litery ?

Wiem. Plus to co @mark. Powiedziałeś w kursie, że “nie możemy w nazwach metod używać wielkich liter”. Zostało udowodnione, że można. Coś więcej potrzeba?

To jak z bombardowaniem szpitali: można, ale nie wolno.

Na początkowym etapie nauki czasem można odrobinę przekłamać, pod warunkiem że dopilnuje się żeby kursant dowiedział się na dalszym etapie całej prawdy (a więc że może definiować metody z wielkiej litery ale jest to wbrew konwencji i receptą na kłopoty, bo metody w Ruby nie powinny być stałymi).

Żeby nie było, nie próbuję bronić tego kursu. Nie widziałem go, a i polskojęzyczne materiały do nauki rubiego i railsów z jakimi miałem dotąd styczność nakazują zachować bardzo daleko posuniętą ostrożność.

1 Like

to można czy nie wolno ? chyba powinno być: można, ale nie powinno się stosować

Widzę, że część kolegó ma z tym problem:

Stala (ciekawe zachowanie właściwie tylko w Ruby)
zmienna_lokalna
@zmienna_instancji
@@zmienna_klasy
$zmienna_globalna
FILE (pseudozmienna)

http://www.tutorialspoint.com/ruby/ruby_methods.htm
(cytat:)
Method names should begin with a lowercase letter. If you begin a method
name with an uppercase letter, Ruby might think that it is a constant
and hence can parse the call incorrectly.

w cytowany fragmencie kursu, jest podana konkretna metoda i konkretny sposób jej wywołania.

Widzę idzie Pan w zaparte, pomimo tego, że już pokazywałem kawałek kodu, który jasno pokazywał, że w rubym można definiować metodę zaczynającą się od dużej litery.

Pana przykład pokazuje bardzo fajną cechę języka. Mianowicie już na poziomie parsera ruby wie czy coś jest metodą lub stałą/klasą. “Tomek” jest już na poziomie parsowania potraktowane jako odwołanie do stałej/klasy (stąd komunikat o niezdefiniowanej stałej).

Dlatego by wywołać metodę, której nazwa zaczyna się od dużej litery musimy jawnie użyć nawiasów.

[1] pry(main)> def Tomek
[1] pry(main)*   puts "ala"
[1] pry(main)* end
=> :Tomek
[2] pry(main)> Tomek()
ala
=> nil
[3] pry(main)> method(:Tomek)
=> #<Method: Object#Tomek>
[4] pry(main)> method(:Tomek).arity
=> 0

Pana przykład dowodzi tylko temu, że wywołanie “Tomek” nie działa, ale nie dowodzi temu, że takiej metody nie ma.

I jeszcze taka ciekawostka. Nawiasy musimy jawnie używać tylko w wersji bez parametrów. Z parametrami nie ma takiej konieczności:

[7] pry(main)> def Tomek(foo)
[7] pry(main)*   puts foo
[7] pry(main)* end
=> :Tomek
[8] pry(main)> Tomek "ala"
ala
=> nil
3 Likes

Tomash, ależ oczywiście, że tak. I ja to już napisałem kilka postów wyżej: wystarczy nie poruszać tematu, że metoda może mieć jednak nazwę zaczynającą się z dużej litery. Natomiast mówienie na dzień dobry nieprawdy (przy czym nie służy to w żadnym wypadku jakimś uproszczeniom) nie powinno mieć miejsca.

1 Like

“should” != “must”

Przykro mi, ale to Pan ma problem.

1 Like

Jeśli już to z wielkiej litery, duże to może być np drzewo.
Nikt nie idzie w zaparte, to raczej Kolega nie zrozumiał przykładu.
Jeśli wywołuję metodę bez nawiasów, to nie mogę zostawić kursanta z dylematem (i nie mówić).
A jeśli kursant napisze metodę z Wielkiej Litery (nie z dużej, tylko z wielkiej) i zobaczy na ekranie błąd, to co? To nie jest kurs “na żywo”. Przykład z sqrt(-1) i wynik jako liczba zespolona jest doskonały. Podobnie jak słynne “jabłko” które ponoć dała Ewa Adamowi. Wiele osób mimo podeszłego wieku, wierzy, że chodziło o jabłko.
Kurs to poziom podstawowy, a nie zaawansowany.
W ten sposób możemy rozmawiać jeszcze prze wiele, wiele stron. Ale efekt będzie nadal ten sam: można, ale się nie powinno. A jeśli można to trzeba użyć nawiasów.
Koniec końców, dyskusja jak większość dyskusji stanie się czystą filozofią.
Jeśli początkujący nauczy się, że może pisać nazwy metod małymi literami, to właśnie tak będzie robił i uniknie wielu kłopotów. I to jest całe podsumowanie dyskusji.
Przecież można pojechać ulicą jednokierunkową “pod prąd”, przecież nie jest to niemożliwe.

Jak już czołgasz kogoś za nieścisłości, to sam musisz być nie do zahaczenia. wielka litera, nie duża.

1 Like

Uważasz, że w ten sposób wprowadziłem kogoś w błąd albo ktoś nie zrozumiał co miałem na myśli? Jesteśmy na forum o języku ruby a nie polskim.

No ja teraz kompletnie nie zrozumiałeś co miałeś na myśli, na tym forum o język rubym a nie polskim. :stuck_out_tongue:

1 Like

Człowieku, teraz zmieniasz widzę kurs. Najpierw w filmie mówisz, że metoda nie może zaczynać się od dużej litery (mogę się założyć, że tego nie wiedziałeś), a teraz udowadniasz, że tego się nie powinno mówić osobie początkującej (co już napisałem dwa razy w tym temacie).

Podsumowując ten temat, bo już nie mam ochoty odpisywać.

Tak, metoda może zaczynać się od dużej litery. Tak, wystarczyło o tym nie wspominać kursantom i nie byłoby tematu i tłumaczenia, że ruby to traktuje jako stałą itp. Mówiąc jednak “metoda musi zaczynać się od dużej litery” pleciesz bzdury.

Ciekawe, tworząc kurs opierałbym się raczej na jakimś bardziej konkretnym źródle wiedzy niż na kolejnym kursie (np. http://ruby-doc.org)

Jeśli chodzi o tą wielkość liter to nie wspominałbym, że nie można pisać metod z wielkiej litery co zostało już obalone, ale skupiłbym się bardziej na konwencji w Ruby, a wg konwencji metody pisze się z małej litery. I to załatwiłoby sprawę. Ale … zapewne o konwencji w tym kursie nie było nic wspomniane.

Dziękuję za uwagę i zapraszam do naszego kursu.

To tylko przykład jednego z wielu źródeł.