Portál AbcLinuxu, 5. května 2025 16:43
Řešení dotazu:
@Nullable
a @NotNull/@Nonnull
rozšiřují statický typový systém a určují, zda při daném použití typu může nebo nemůže být hodnota null
. Některé jazyky tohle rozlišují přímo v typovém systému. Ostatně Java 8 z tohohle důvodu přišla s typem Optional
, který tenhle problém řeší bez změny typového systému – a v ideálním případě by všechny @Nullable
typy měly být nahrazeny Optional
(což je s ohledem na zpětnou kompatibilitu nereálné). S testy to nemá nic společného, stejně jako statický typový systém nenahrazuje testy.
Představte si, že píšete nějakou knihovnu. Když nějaká metoda může vracet null
hodnotu, oanotujete (pokud má být knihovna kompatibilní i s Javou 7) ji právě anotací @Nonnull
. To, co označuje ta anotace, byste musel otestovat v kódu, který tu knihovnu používá (tam musí být ošetřen případ, kdy se vrátí null
). Takže vaše otázka ve skutečnosti zněla – spouštíš před commitem do knihovny testy ve všech projektech, které knihovnu používají? To jste se ale zeptal pěkně hloupě, že?
Přidám @Nullable do interfacu/kamkoliv a za sekundu je to prošířené i v deseti dalších souborech na správných místech (předci i potomci), připravené ke komitu.Takto upravený text není připraven k commitu.
null
hodnotami je výborný příklad – pokud programátor předpokládá, že nějaká hodnota nemůže být null
, bude to samé předpokládat i u testů a nenapíše test, který by tohle kontroloval. Daleko lepší je, když se nullabilita kontroluje v rámci statické analýzy, kdy se zkontroluje veškerý kód bez ohledu na to,jakým způsobem se bude provádět. A ještě lepší samozřejmě je, když programátor už během psaní jasně ví, zda daná hodnota může nebo nemůže být null
– protože na tom nezávisí jenom kód (který kontroluje kompilátor nebo jednotkové testy), ale také algoritmus. A když teprve dodatečně zjistí, že tam vlastně může být i null
hodnota, může se stát, že opraví kód, ale neopraví program.
Za druhé, spouštění testů je v té hierarchii čím dál nákladnější, ale zároveň je potřeba, aby všechny ty testy proběhly před tím, než se kód dostane někam dál. Proto se spouští různé testy automaticky před nebo po commitu a na různých repository. Takže nezmiňovat testy před commitem není nic špatného, protože to závisí na pravidlech daného projektu a s commitem to přímo nesouvisí. Integrační a funkční testy se obvykle spouští až po commitu nad nějakým centrálním repository, takže není vůbec neobvyklé, že testy proběhnou až po commitu. A i spouštění jednotkových testů může být s commitem nějak svázané, např. že se testy spustí automaticky před commitem – a pak je zbytečné spouštět je předtím ještě jednou ručně, je to jen ztráta času.
Za jednu z hlavních považuji, že na veškeré programování mohu používat jediný editor, na který jsem zvyklý a který používám od doby, kdy tady ještě IDE nebyla.To, že jste na Vim zvyklý, je subjektivní věc, rozhodně to není platné všeobecně.
Má všechno, co ke své práci potřebuji.Opět subjektivní tvrzení, které navíc nejspíš platí proto, že toho nepotřebujete mnoho.
Propojení Vimu s kompilátorem či interpretrem mu dává podobné schopnosti jako uváděná IDE.No, ta podoba je velmi velmi vzdálená. Navíc aby to opravňovalo doporučovat Vim místo IDE, ty schopnosti by musely být alespoň srovnatelné, ne-li lepší.
Vim má vlastní makrojazyk, který je 10. nejrozšířenějším jazykem a který je objektový.Pluginy do Idey, NetBeans i Eclipse se píšou v Javě, tedy přesně v tom jazyce, o kterém se tu bavíme. Takže se nemusím učit druhý jazyk.
Je v něm napsána celá konfigurace pro asi 500 programovacích a jiných jazyků.Nějak nevidím tu výhodu, že kromě jazyka, o kterém je řeč, podporuje ještě 499 jiných jazyků.
Konfigurace se dá snadno verzovat a distribuovat.Konfigurace Idey a NetBeans jsou XML soubory, konfiguraci Eclipse myslím properties soubory. Také se dají snadno verzovat a distribuovat. A mimochodem se to i využívá. Viděl jste nějaký Java projekt, který by měl sdílenou konfiguraci Vimu? Nebo je to spíš tak, že Vim používají jednotlivci, používají ho po svém a každá taková instalace Vimu vypadá úplně jinak?
Spuštění Vimu je řádově rychlejší, než spouštění IDE. Typicky se jedná o zlomky sekundy. Pro mnohé programátory nepodstatné, ale pro mne důležité.Tady jste to rovnou sám napsal, že je to vaše subjektivní hodnocení, které pro ostatní není důležité. Mimochodem, během toho zlomku sekundy Vim stihne udělat i analýzu kódu a vše zaindexovat, takže vám dokáže okamžitě po spuštění třeba napovídat názvy metod a parametry? Možná kdybyste používal nějaký vhodnější nástroj, nemusel byste ho tak často ukončovat a pak by vás nezajímalo, jak dlouho startuje…
Pokud tedy potřebuji provést nějaký netriviální úkol, např. konvertovat HAML do XML, XML do HTML či JSON, zavolám si přímo v editoru externí službu, která mi to provede na definovaných řádcích. Stejně jednoduchý je import výsledku databázového či http dotazu.Ve zdrojácích Javy, které jsem viděl, se naštěstí kusy HAML, HTML, XML nebo JSON přímo v Java kódu vyskytují minimálně, a naneštěstí tam bývají obalené Java kódem, takže použít rovnou řádky ze souboru je nemožné (protože to nebude třeba XML, ale XML s uvozovkami, středníky a plusy navíc). Takže zavolat přímo tu externí službu by bylo k ničemu. A když už bych něco takového potřeboval provést, mám k dispozici schránku. Spíš se ale v takových projektech vyskytují samostatné HAML, HTML, XML nebo JSON soubory, a s těmi mohu zase v IDE normálně pracovat stejně jako s Javou. A samozřejmě na nich mohu zavolat i externí služby. Chápu, že pro vás je to velká výhoda Vimu, protože bez toho by to byl jenom dobrý editor a vývojové prostředí by z toho udělat nešlo. Ale porovnávat to s IDE je směšné – vždy IDE jsou právě od toho, abych externí nástroje používat nemusel a měl vše, co potřebuji k práci, integrované v jednom programu. Tak, abych to mohl používat všechno stejně, abych to mělo snadno dostupné.
Silnou zbraní Vimu jsou regulární výrazy, které jsou jinými uživateli obvykle podceňovány.Což ovšem nijak neodlišuje Vim od IDE. Čím se naopak IDE liší, je to, že ty regulární výrazy můžu použít i kontextově – třeba hledat ve všech změněných souborech nebo ve všech souborech testů, které mají příponu .java, a můžu hledat třeba jenom v komentářích nebo ve stringových literálech (nebo naopak mimo ně).
Považuji za důležité, že Vim nemá kolem sebe žádná tlačítka ani nějaké pull-down menu. Vše je soustředěno do jednoho příkazového a jednoho stavového řádku. To přispívá k hygieně při práci.Opět nic, čím by se Vim odlišoval. Naopak, IDE těch režimů práce podporují víc a umožňují mezi nimi snadno přepínat – od toho vašeho módu, kdy mám fullscreen textový editor a nic kolem, až po editor zarámovaný ze všech stran různými panely, které klidně můžu vzít a přetáhnout na vedlejší monitor. Jinak Vim je skvělý editor třeba když potřebuju oeditovat nějaký konfigurák vzdáleně na serveru. Ale myslím, že mu dělají medvědí službu ti, kteří jej doporučují jako vývojové prostředí pro běžné jazyky, které jsou podporované IDE – a kteří, když mají napsat, jaká je výhoda Vimu při takovém použití, vyjmenují pár subjektivních výhod a pak několik věcí, ve kterých je Vim stejný nebo horší než IDE.
javac
), což způsobovalo komplikace u některých složitějších konstrukcí s generikami. ejc
je dokázal přeložit, ale javac
hlásil, že některé typy nedokáže odvodit.
Jinak JetBrains má nové IDE pro C a C++ – CLion. Pokud JetBrains udržel úroveň, na jakou jsme zvyklí z jiných jejich IDE, mohlo by to být zajímavé.
vim
u je v pořádku?
i takové čtení kódu je důležitější, než jeho psaní.
stačí přitom klikat na žárovičky a podtržená slova a mačkat dokola dve-tři zkratkyNestačí. To je pouze nesmyslný argument, který si vymysleli lidé, kteří IDE nepoužívají. V reálném světě nic takového použít nejde.
stačilo se na to podívat z vyšší perspektivy než kterou to IDE nabízeloAno, je vidět, že IDE nepoužíváte.
A myslím si (ale v tom se možná mýlím) že dotyčnému by stačilo mu tyhle obezličky vypnout a donutit ho tím aby přestal zběsile "psát" (klikat) a začal konečně kód číst a chápat, protože by mu nic jiného nezbývalo.Ano, v tom se mýlíte, protože s IDE nemáte žádné zkušenosti. Mimochodem, ty nápovědy se pořád aspoň týkají kódu, takže nutí dotyčného přemýšlet o tom kódu. Což je pořád lepší, než když se dotyčný musí soustředit hlavně na to, jak má Vim vůbec ovládat, a samotný program je někde na okraji jeho zájmu.
nemusím číst nápovědy co mi říkají jak řešit nějakou chybu při kompilaciNápovědy, jak řešit nějakou chybu při kompilaci, vám dává i gcc – a čím lepší nápověda, tím lepší kompilátor. Podstatou nápověd IDE ale nejsou chyby při kompilaci (nepamatuji si, že by mi IDE v takové situaci dávalo jinou nápovědu, než kompilátor), nýbrž upozorňování na nestandardní věci v kódu (na což upozorňují varování kompilátoru) a případně návrhy na změny v kódu.
A nebo by možná nebyl vůbec.Ano, to je velice pravděpodobné.
Pořád lepší než ten hnus co jsem opravoval celé dny.To je ale čistě vaše chyba, nesvádějte to na IDE. Začátečník se nejprve musí naučit programovat, vy jste to také neuměl od narození. Když ten kód opravíte za něj, nic se nenaučí. Máte mu vysvětlit, co je na kódu špatně a jak to má opravit, a nechat ho, ať to opraví sám. Tak se to naučí nejlépe. Stejně tak ho máte odkázat na někoho, kdo ho naučí, jak si nakonfigurovat IDE (pokud pro to není projektový standard). Ty komentáře „How to change generated methods“ totiž svědčí o jediném – že to IDE nemá nakonfigurované. Není se čemu divit, když ho má vést někdo, kdo s IDE nemá zkušenosti.
Není se čemu divit, když ho má vést někdo, kdo s IDE nemá zkušenosti.
if
u, pokud to daný jazyk umožňuje), a pokud není, měl by kód upravit tak, aby bylo jasné, že jde o záměr (čímž obvykle zmizí i to upozornění IDE). Ta úprava se nedělá kvůli IDE, ale kvůli programátorům, kteří ten kód budou číst později, a viděli by tam stejný problém, jako to IDE. Další stupeň návrhů jsou návrhy, jak ten kód napsat alternativním způsobem ale ekvivalentně ke stávajícímu. Třeba otočit podmínku if
u a prohodit větve if
a else
, přepsat for
cyklus na for-each
apod. To už není nic, co by programátor měl nějak řešit, prostě je to jenom nápověda, že se to dá napsat i jinak, a když budu chtít, tak to můžu použít. Pokud by programátor pracoval vámi popsaným způsobem, tak se u těchhle návrhů zacyklí, protože když nechá předělat for
na for-each
, IDE mu nabídne, že by se to dalo udělat i pomocí for
u a nabídne reverzní změnu. To, že se takhle žádný programátor nezacyklil, je dobrý protipříklad k vaší představě, že uživatelé IDE jsou takoví matláci, kteří klikají na všechny návrhy IDE, dokud to jde. No a poslední návrhy jsou návrhy na významové změny kódu. Třeba někdo napíše if
, dovnitř dá dvacet řádek významového kódu, a za if
em nebo v else
je jednořádkové ošetření nestandardní situace vrácením defaultní hodnoty. Čitelnosti programu prospěje, když se podmínka otočí, rovnou se vrátí defaultní hodnota, a pak kód na nejvyšší úrovni pokračuje těmi dvaceti řádky významového kódu. Otočit tu podmínku samozřejmě můžu ručně, abych si procvičil booleovské operace a zkrácené vyhodnocování, a nebo to můžu nechat na dva stisky kláves udělat IDE. Opět, pokud takovéhle návrhy IDE programátor bez přemýšlení aplikuje, má nadosmrti co dělat, navíc bude měnit význam kódu.
Protože IDE nemůže logicky vědět co po tom programu chce programátor, ať si je sebechytřejší.Co po tom programu chce programátor má být právě napsané v tom kódu. Když je to napsané tak srozumitelně, že to chápe i IDE, je docela slušná šance, že to budou chápat i ostatní programátoři, že to bude za půl roku chápat sám autor, a že v tom kódu je napsané opravdu to, co si autor myslí, že tam napsal. Moje zkušenost je taková, že když IDE napovídalo divně a vypadalo to, že nepochopilo, co programátor chce, velice často to bylo tak, že programátor napsal něco jiného, než co napsat chtěl.
Umí třeba IDE eliminovat všechna "else"? Ve Vimu to není žádný problém.Samozřejmě, že to umí. A doporučuji nevytahovat tady všech pět kontrol a návrhů, které Vim umí, protože IntelliJ Idea jich umí stovky. Takže když vytáhnete jednu a zeptáte se, zda to IDE umí, uživatele IDE takový dotaz rozesměje a nejprve nepochopí, že ten dotaz myslíte vážně. Protože uživatel IDE má lepší věci na práci, než procházet konfiguraci IDE a učit se nazpaměť ty stovky kontrol a návrhů, které IDE nabízí.
Říkám si: Ale ouha! Pod takovým trollovským příspěvkem o pseudoeditoru určeném pro roboty bude určitě nejdelší a nejméně konstruktivní diskusní vlákno.
A taky že jo. Jak jinak.
Sorry, ale vim prostě nic neumí. Možná umí prudit uživatele tím, jak jde naschvál proti intuici a jak je navržený kolem memorování nesourodých shluků písmen. Ve srovnání s Eclipse nebo IntelliJ (kam asi tazatel mířil) je vim prostě k hovnu. Proto mi nějak nedochází, jaký má takové doporučení vlastně smysl.
Mimochodem, jak ve Vimu zapnu auto-completion, která zná typy, balíčky a třídy a která zobrazuje JavaDoc (nebo jiný Doc, podle jazyka)? Fakt by mě to upřímně zajímalo. Asi je jasné, že různých poměrně podstatných featur, na které se vim z principu nezmůže, budou mít IDE desítky.
Totéž řečeno jinak: Tazatel se ptal na prostředí, ne na editor.
Zařídit, aby taby v Eclipse vypadaly a fungovaly jako vim (fujtajbl, ale proti gustu žádný dišputát) se dá velmi snadno, kdyby to někdo chtěl. Tab v Eclipse je asi tak to spektrum nasazení, na které se vim zmůže a ke kterému je určený. Je to editor, nikoliv vývojové prostředí.
Version: Mars.2 Release (4.5.2) Build id: 20160218-0600Použij instalaci z www.eclipse.org ke stažení je už i verze Neon.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.