klamry vs. "end"

1

Załóżmy, że macie wybór pomiędzy dwoma językami: X i Y. Obydwa są praktycznie identyczne - z jedną różnicą. W języku X do pętli czy instrukcji warunkowych korzysta się z klamer (jak w większości języków programowania):

if (warunek) {
 działanie();
}
else {
 działanie2();
}

Język Y używa zamiast tego słów kluczowych:

if (warunek);
 działanie();
else;
 działanie2();
end;

(W powyższym przypadku else; jest interpretowane jako end; if(!warunek);)

0

A jakie jest pytanie? ;]

1

Klamry. Bo wygodniej się pisze { niż begin.

0

@up@up, pewnie takie, którą opcje byś wolał, @ShookTea pomyślał jeszcze o zagadce do pytania, byśmy się nie nudzili. <bravooo>

0

czemu nie ma odpowiedzi Z:

def main():
  sralal...
  blablabla...
  cos_tam_jeszcze_ciekawego

?

0

Więc zależy...
{ pisze się wygodniej, a z kolei begin jest czytelniejsze.
Jeżeli obydwa są praktycznie identyczne, to wybrałbym jakiś trzeci, przy którym nie zastanawiałbym się nad taką trudną decyzją ;-;

2

if (warunek);
działanie();
else;
działanie2();
end;

Średniki po if i else są bez sensu.

0

Najczytelniejszy byłby render z LaTeXa :]

5

Osobiście uważam, że klamry są najlepszym rozwiązaniem/lepszym od begin...end bo:

  • są logiczne co najmniej w takim stopniu jak begin...end
  • łatwiej/szybciej można je napisać
  • nie mieszaja sie z keywordami/nazwami
  • jako dla mnie, ścisłowca, łatwiej jest wypatrzeć i zinterpretować jeden znak (który tutaj się dodatkowo wyróżnia od innych) niż cały wyraz
2
  • są logiczne co najmniej w takim stopniu jak begin...end

Klamry są o tyle logiczne, że służą do grupowania/wydzielania danej treści i to nie tylko w programowaniu; begin i end są czytelniejsze, bo łatwiej jest czytać słowa, niż zestawy znaków (nie dotyczy Johna Nasha);

  • łatwiej/szybciej można je napisać

Tak, łatwiej jest napisać dwa znaki, niż osiem - tutaj nie ma żadnych "ale";

  • nie mieszaja sie z keywordami/nazwami

begin i end także się nie mieszają, bo to są keywordy; Na dodatek kolorowanie składni zawsze elegancko je uwidacznia spośród innych słów w kodzie programu, przy czym oczywiście jeszcze pomaga "code folding";

  • jako dla mnie, ścisłowca, łatwiej jest wypatrzeć i zinterpretować jeden znak (który tutaj się dodatkowo wyróżnia od innych) niż cały wyraz

Patrz punkt wyżej - "syntax highlighting" + "code folding" daje znaczące wyróżnienie; Umysł ścisły czy humanistyczny nie ma tutaj większego znaczenia - interpretacja kodu jest zawsze prosta, jeśli jest kolorowanie składni; Więc czy dany blok wydzielany jest za pomocą znaków {}, [], (), %%, czy za pomocą słów begin-end, poczatek-koniec, start-finish - większego znaczenia nie ma, bo i tak jeśli są innym kolorem/stylem w porównaniu z pozostałą częścią kodu to i tak rozum podpowiada, że znaczą one więcej, niż tylko pusty tekst; Do tego dochodzą jeszcze odpowiednie wcięcia, które uwidaczniają dany blok kodu, które też znacząco wpływają na postrzeganie;


Podsumowując - ciężko jest o w pełni obiektywną ocenę, bo przeszkadza przy tym przyzwyczajenie z danego języka; Programistom C, C++, C#, Java itd. na pewno łatwiej zrozumieć klamry, zaś programistom pascala czy VB łatwiej zrozumieć słowne keywordy; Gdyby one komukolwiek przeszkadzały - nie wymyślano by takich składni, bo po co? Po to, żeby się męczyć i gubić w kodzie?

Osobiście wolę begin, end bo takie jest moje przyzwyczajenie z Pascala, ale to ocena subiektywna, z którą dużo osób się nie zgodzi (głównie dlatego, że nie piszą w Pascalu czy VB);

Na dodatek zobacz na składnię VB - w nim dopiero trzeba się opisać, a nikomu to nie przeszkadza; Zobacz jak wygląda deklaracja zmiennej:

VB:

Dim FooVar As Integer;

Pascal:

FooVar: Integer;

C++:

int FooVar;

Części ludzi po prostu nie przeszkadza to, że trzeba więcej napisać, by zrobić dokładnie to samo, co w innych językach można osiągnąć dwa razy krócej.

1

Od paru ładnych lat piszę w Rubym, gdzie jest begin i end i bardzo rzadko się spotyka słowo begin.

@Sopelek:

  • nie mieszaja sie z keywordami/nazwami
  • jako dla mnie, ścisłowca, łatwiej jest wypatrzeć i zinterpretować jeden znak (który tutaj się dodatkowo wyróżnia od innych) niż cały wyraz

Jak na moje to dziwne podejście. begin i end są keywordami jak powiedział @furious programming, więc nie mają się z czym mieszać. Przykład (Ruby, co raczej oczywiste):

class Foo
  def self.end
    puts 'end'
  end
end

Foo.end #=> end

Nie wiem jak ty, ale ja jako ścisłowiec zarówno } jak i end rozumiem jako ideę końca bloku, a nie jako słowo czy symbol. Dodatkowo, jak piszę to chciał bym móc od razu zauważyć gdzie jest koniec bloku, a z racji, że w Rubym można napisać

var = if a then b else c end

(na szczęście rzadko spotykane, raczej używa się ?:) co daje złudzenie, że kod wygląda jak tekst napisany w języku naturalnym.

0

Duzym ulatwieniem sa tez "kreski" okreslajace dany blok (nie wiem za bardzo jak to sie nazywa ;P), np.
obrazek.PNG

W tym przypadku zaznaczylem na czerwono w celu uwidoczenienia efektu.

  • Oczywiscie dyskusja ta ma maly sens. Ja postawie na klamry bo cale zycie praktycznie pisze w jezykach z klamrami.
0

Ja nie na widzę 2 konwencji (właściwie 3) w językach z klamrami jednej jak wyżej, drugiej gdzie otwierająca klamra jest w linii niżej. Przestawienie się jest czasami dość ciężkie. Trzecia grupa to pisanie jedno linijko-wców.
IMO średniki, klamry czy bloki powinny być wywalone a zasięg powinien być opisany przy pomocy wcięć. Niestety jeśli język ma odnieść sukces to składnia musi być oparta na C a ta choć na pierwszy rzut oka oszczędna to trzeba czasem się nagimnastykować, choćby tą klamrę zrobić SHIFT+[. Poza tym teraz przy automatycznym wykańczaniu kodu wszystko sprowadza się do napisania sygnaturki i wybraniu z listy podpowiedzi bądź wstawienie całego szablonu np. klasy.
Obecne języki IMO powinny ściśle współpracować z IDE np. zbędne jest robienie deklaracji funkcji skoro IDE może nam taką listę ładnie wygenerować na podstawie definicji.
Rygor w sprawie jednego słusznego stylu sprawia, że nie trzeba się denerwować na to jaki kod dostaniemy bo przynajmniej formatowanie będzie po ludzku.

Kiedyś przez oczy przemknął mi jeszcze taki zapis if'a:

foo := 7 if bar>0

Niestety nie pamiętam języka - co o takim czymś myślicie? Przynajmniej do prostych warunków zamiast

if bar>0 then
  foo := 7 
1
szopenfx napisał(a)

co o takim czymś myślicie?

Szczerze mówiąc - strasznie to dziwnie wygląda...

IMHO jeśli ma być warunek, po spełnieniu którego mają być wykonywane instrukcje, to składniowo warunek powinien być pierwszy, a instrukcje, które mają być wykonane gdy warunek jest prawdziwy - po nim;

Jeśli natomiast taka składnia miałaby być jedynie do wyrażej prostych, a przy bardziej złożonych na odwrót - analiza kodu była by naprawdę wkurzająca; Część warunków pewnie by się w ogóle nie zauważyło, chyba że kolorowanie składni wyróżniałoby znacząco tego ifa;

szopenfx napisał(a)

Niestety jeśli język ma odnieść sukces to składnia musi być oparta na C

@Patryk27 - Twój SScript ma szansę na sukces! :]

0

@szopenfx, @furious programming ta składnia nie pochodzi z CoffeeScripta (który ją zaciągnął z Rubiego), tylko z Perla i jest całkiem wygodna (przynajmniej dla mnie). Taki zapis wygląda jak zapis zdania w języku angielskim, przykład:

print while gets # użyłem tu trochę magii (`print` domyślnie wypisuje zawartość zmiennej globalnej `$_`, która działa jak w Perlu, jest ostatnim wczytanym ciągiem znaków

Może przykład wyżej jest nie do końca czytelny co ma całkowicie zrobić (przynajmniej dla programistów), ale to jest cat napisane w Rubym. Innym przykładem może być:

@my_var = true if @my_var.nil?

Co przypisze do zmiennej @my_var prawdę wtedy i tylko wtedy gdy @my_var będzie puste (dla wartości nie boolowskich można dać zwykłe @my_var ||= 10).

1 użytkowników online, w tym zalogowanych: 0, gości: 1