wtorek, kwietnia 18, 2006

Dalsze przygody z C#

Poznałem przed chwilą ciekawy ficzer połączenia Bloggera i Google Toolbara ;-) Jeżeli w trakcie sprawdzania pisowni kliknie się na słowie, które jest linkiem linka zadziała, a cały tekst wpisu diabli wezmą ;-)


Wracając jednak do tego o czym chciałbym dziś napisać ;-)

C#, znów C#. Tym razem urzekły mnie struktury, trochę zniesmaczyły problemy z przeciążaniem operatorów i zniesmaczył sposób zapisu po kim klasa dziedziczy i kogo implementuje.

Struktury mi się podobają. Co prawda można je np. w Java'ie udać przez malutkie klaski, ale w C# jest to wydzielona struktura języka co ma swoje plusy. Nie podoba mi się za to, że struktur jako skalarów można używać bez ich tworzenia.

Location lo;
lo.x=10;
lo.y=10;

Taki zapis jest całkiem poprawny z punktu widzenia C#, dla mnie już za to nie do końca ;-)

Przeciążanie operatorów też mi się podoba, ale nie podoba mi się to, że przeciążywszy operator wypada także stworzyć metody, które "odwalą jego robotę", a będzie ich można użyć gdy wykorzysta się klasę .NETową napisaną w C# w innym .NETowym języku, który nie wspiera przeciążania operatorów. Wskazuje to wg. mnie na niedopatrzenia w architekturze, można przecież było przyjąć, że tworzone będą w takiej sytuacji odpowiednie metody, np. dla operatora + metoda additionOperator() albo coś podobnego.

Nie podoba mi się za to zapis dziedziczenia i implementacji. W Java'ie mamy ładny kod:

public class Ryba extends Zwierze implemments Plywalne

za to w C#:

public class Ryba:Zwierze, Plywalne

Niby ten zapis z C# krótszy, ale chyba akurat w tym miejscu nie o krótkość zapisu chodzi, a o jego czytelność.

W ogóle mam wrażenie, że C# jest jednak zbyt stechnizowany. Jest na pewno ciekawym i dobrym językiem, ale ma słabsze momenty w których elegancje zastąpiono technicznością.



C# to taka suma z Delphi i Java'y, to podobieństwo do Delphi tłumaczy osoba Anders Hejlsberg, który maczał swoje palce w obu tych językach. Wydaje mi się też, że przez te Delphi'owe dodatki C# stracił na swojej elegancji, zyskał za to może na elastyczności, ale przez to pozwala na popełnienie większej ilości błędów.



Podobne postybeta
Bio"etyka"
"Językizm" czyli co mnie razi w C#
Swing - największe zło Java'y ;-)
Refactoring bez testów to proszenie się o problemy ;-)
Dart - się mnie podoba :-)

4 komentarze:

  1. C# to suma Javy, Delphi i C++, stad wlasnie dziedziczenie i implementacja interfejsow zapisywane sa w taki, a nie inny sposob.

    Ponadto, struktury sa trzymane w stosie, a nie na stercie i dla spojnosci jezyka domyslnie wywolywany jest konstruktor bezparametrowy.

    Jesli nie podoba Ci sie C#, zapraszamy do VB.NET :)

    OdpowiedzUsuń
  2. Dziękuje, postoje ;-) i zostanę przy Java'ie :-)
    Nie kryję jednak, że przez te 3 lata C# trochę wydoroślał :-) i ma kilka fajnych ficzerów.

    OdpowiedzUsuń
  3. A wystarczy wpisać:
    public class Ryba:Zwierze, IPlywalne

    OdpowiedzUsuń
  4. @piotrb - ale to jest konwencja, nie wymóg języka. Chcieli zrobić "dobrze" developerem żeby nie musieli się "męczyć" i pisać implements. Dodatkowo jak ktoś się pomylił i Zwierze też jest tylko interfejsem to leżysz ;-)

    OdpowiedzUsuń