Citace: Kit 28. 01. 2018, 01:05:55- Program by se měl psát tak, aby se v něm nedělaly testy na null. Otazník jako syntaktický cukr je tedy zbytečný.To ale prakticky nejde, uz jen treba Rest metoda, do ktere ti framework rozparsuje http parametry. Musis testovat na null. Stejne tak ORM mapovani, nebo Modelyy neceho, taktez by mely mit moznost mit null a ty to pak budes testovat. Jak by jsi napr. u tridy AutaXMLModel resil, ze proste Auto nemelo zadany treba VIN? Jak to chces udelat jinak nez pres null?Takze rekneme, ze ti prijde do rest metody Kód: [Vybrat]JAVAgetDistance(Firma z) { int psc; if( z != null && z.getDodaciUdaje() && z.getDodaciUdaje().getAdresa() != null) { psc = z.getAdresa().getDodaciUdaje().getPSC(); }}C#zpracujZakazky(Firma z) { int psc = z?.Adresa?.DodaciUdaje?.PSC;}V Javě když děláš 3 vrstvou architekturu tak máš celý kód zaneřáděný přinejmenším null checky, gettery a settery.
- Program by se měl psát tak, aby se v něm nedělaly testy na null. Otazník jako syntaktický cukr je tedy zbytečný.
JAVAgetDistance(Firma z) { int psc; if( z != null && z.getDodaciUdaje() && z.getDodaciUdaje().getAdresa() != null) { psc = z.getAdresa().getDodaciUdaje().getPSC(); }}C#zpracujZakazky(Firma z) { int psc = z?.Adresa?.DodaciUdaje?.PSC;}
Smalltalk:Firma>>dodaciUdaje: anObjectdodaciUdaje := anObject asDodaciUdajeDodaciUdaje>>adresa: anObjectadresa := anObject asAdresa*UndefinedObject>>asDodaciUdaje ^ NullDodaciUdaje new*UndefinedObject>>asAdresa ^ NullAdresa new
| firma psc |firma := Firma new.psc := firma dodaciUdaje adresa psc.
Dělal jsem poslední 2 roky profesně v Javě a předtím na VŠ v :NETu. Teď uvažuju přejít na .NET a dělám takový zkušební projekt. Napíšu tady nějaká porovnání těchto 2 platforem a snad se do této diskuze někdo další přidá a napíše své postřehy.1. C# a Java. C#má značně bohatší syntax, ale trošku za Javou pokulhává ve filozofii výstupních artefaktů. V Javě je to vždy JAR soubor a je jedno, jestli je to knihovna nebo spustitelný JAR. Z toho plyne snadnost získání knihovny do Java aplikace: prostě získám JAR. U .NETu je to složitější, protože musím zkompilovat DLL knihovnu.2. Každý JAR soubor může oproti DLL knihovně obsahovat i zdrojové souboury. Zkrátka v něm může být zabalený celý projekt se vším všudy. Navíc, ikdyž zdrojové soubory neobsahuje, každé IDE mi bytecode umí převést do Tříd a já si tak můžu AdHoc v IDEčku proklikávat zdrojový kód libovolné třídy z načteného JARka. Navíc i zkompilovaný kód si v Javě drží původní adresářovou strukturu a názvy souborů.3. Příje mi, že C# je místy překomplikovaný. Např. můžu do 1 souboru dát více než 1 třídu a název souboru s touto třídou ani nemusí korespodnovat. Příjde mi to trochu nešťastné, protože se musím manuálně starat o to, aby to bylo dodrženo. S tím souvisí i Namespacy, které vůbec nemusí dodržovat adresářovou strukturu v projektu. Systém balíčků v Javě a pravidlo, že jméno Package s tečkovou notací musí dodržovat umístění v adresáři a název souboru musí korespondovat s názvem třídy mi přijde lepší.4. Zkoušel jsem i .NET Core a Java jednoznačně válí s Mavenem. .NET má několik jakýchsi konfiguračních souborů projektu, Javě stačí jen pom.xml a v něm nastavím nejen závislosti na další JARka, ale taky můžu řešit build management.5. Je to zvláštní, ale v .NET znatelně déle trvá, než se spustí nějaký jednoduchý Unit Test. Než se ten projekt zkompiluje, tak to prostě zabere čas. Příjde mi, že v Javě se Unit test spustí prostě adhoc, na nic se nečeká. Je to důležité, protože když nějakou třidu upravuju, chci si neustále pouštět průběžně unit testy a chci, ať se pustí prostě ihned. Jestli ono to není tím, že v .NETu se musí sestavit EXE soubor i při editaci jediné třídy, zatímco v Javě se vždy uplatní inkrementální build.6. Celková uzvřenost kódu v .NET platformě. Nejen, že .NET knihovna je closed source a vy si nemůžete projít zdrojový kód a prostě upravit standardní knihovnu zděděním nějaké třídy, ale vy si nemůžete ani takto procházet naimportované DLL knihovny, protože i v nich budou chybět těla metod. V Javě si můžu jakoukoliv třídu z jakéhokoliv zdroje rozkliknout a podívat se, jak je naimplementovaná. Dost mi to teď chybělo v .NETu u XMLSerialize, který jsem potřeboval upravit pro línou deserializaci XML souboru - no way.
Citace: anonym 28. 01. 2018, 09:14:29Citace: Kit 28. 01. 2018, 01:05:55- Program by se měl psát tak, aby se v něm nedělaly testy na null. Otazník jako syntaktický cukr je tedy zbytečný.To ale prakticky nejde, uz jen treba Rest metoda, do ktere ti framework rozparsuje http parametry. Musis testovat na null. Stejne tak ORM mapovani, nebo Modelyy neceho, taktez by mely mit moznost mit null a ty to pak budes testovat. Jak by jsi napr. u tridy AutaXMLModel resil, ze proste Auto nemelo zadany treba VIN? Jak to chces udelat jinak nez pres null?Takze rekneme, ze ti prijde do rest metody Kód: [Vybrat]JAVAgetDistance(Firma z) { int psc; if( z != null && z.getDodaciUdaje() && z.getDodaciUdaje().getAdresa() != null) { psc = z.getAdresa().getDodaciUdaje().getPSC(); }}C#zpracujZakazky(Firma z) { int psc = z?.Adresa?.DodaciUdaje?.PSC;}V Javě když děláš 3 vrstvou architekturu tak máš celý kód zaneřáděný přinejmenším null checky, gettery a settery.Kód: [Vybrat]Smalltalk:Firma>>dodaciUdaje: anObjectdodaciUdaje := anObject asDodaciUdajeDodaciUdaje>>adresa: anObjectadresa := anObject asAdresa*UndefinedObject>>asDodaciUdaje ^ NullDodaciUdaje new*UndefinedObject>>asAdresa ^ NullAdresa newKód: [Vybrat]| firma psc |firma := Firma new.psc := firma dodaciUdaje adresa psc.Nekontroluji null ani jednou. Obdobne pro firmu, kdyby byla null.
Citace: Kit 28. 01. 2018, 01:05:55- Program by se měl psát tak, aby se v něm nedělaly testy na null. Otazník jako syntaktický cukr je tedy zbytečný.V Javě když děláš 3 vrstvou architekturu tak máš celý kód zaneřáděný přinejmenším null checky, gettery a settery.
Citace: anonym 28. 01. 2018, 09:14:29Citace: Kit 28. 01. 2018, 01:05:55- Program by se měl psát tak, aby se v něm nedělaly testy na null. Otazník jako syntaktický cukr je tedy zbytečný.V Javě když děláš 3 vrstvou architekturu tak máš celý kód zaneřáděný přinejmenším null checky, gettery a settery.Zvláštní, null checky, gettery ani settery nemám v PHP ani v Javě. Kdo umí OOP, tak tohle smetí nepotřebuje.
Citace: Kit 28. 01. 2018, 20:59:56Zvláštní, null checky, gettery ani settery nemám v PHP ani v Javě. Kdo umí OOP, tak tohle smetí nepotřebuje.Tak mi vysvětli, jak bys řešil tu věc s objektem, co ti přijde z RESTu. To by mě fakt zajímalo, jak se vyhneš zběsilým null checkům.
Zvláštní, null checky, gettery ani settery nemám v PHP ani v Javě. Kdo umí OOP, tak tohle smetí nepotřebuje.
Jedna laická otázka.Čo je také zlé na testovaní null hodnoty?
K čemu testovat null, když máme výjimky.
Citace: Kit 29. 01. 2018, 06:13:50K čemu testovat null, když máme výjimky.ty musis byt "vynimocny" programator. vyhodenie vynimky je ovela narocnejsie ako porovnanie na null.