Nehodlám polemizovat s Vašimi rok starými i současnými výroky
Ty s nimi pro jistotu nehodlas polemizovat vůbec, už jsi to zkusil a vis
ze neobstojis .
Bloky kódu se neukončují středníkem, dvojtečka je volitelná.
Uvádět že bloky kódu se neukončují středníkem jako výhodu VB může jen
debil. Nedělá to žádný mě známý jazyk. Máš-li tím na mysli příkazy, tak
naopak všechny mě známé jazyky používají středník, ať povinně jako Java či
C nebo nepovinně, jako JavaScript nebo Python. Tedy s výjimkou VB.NET,
který nesmyslně používá dvojtečku, která se obtížně píše přes Shift.
Ukončovat s ní každý příkaz je pruda. Kromě toho i typografický význam znaku
dvojtečka je něco uvádět, ne končit, k tomu slouží právě znak středník.
Tohle je jen další případ nesmyslnosti syntaxe VB.NET. Jestli tahle
nesmyslnost je pro tebe důvod proč používat VB.NET, tak fajn, ale chápej,
že tím nikoho nepřesvědčíš. Když vydáváš nevýhody jako výhody (zde např.
i problém s devítkou), pak jsou veškerá tvá tvrzení nedůvěryhodná.
syntaxe VB.NET lze psát inline kód podobně, jako v C# (čehož se využívá ve
VBSkriptu)
Člověče, již jednou jsi se zde dopustil trapně nesmyslného tvrzení o jiných
jazycích, aniž bys to byl schopen na rovinu přiznat a už to děláš zase.
Proč mluvíš o něčem, co neznáš a nedovedeš to ani pojmnovat?
VBSkript nic není a VB Script nemá s VB.NET kromě tvůrce nic společného, stejně
jako nic společného nemá JavaScript s Javou, jsou to různé jazyky. Že lze
něco dělat ve VB Scriptu je irelevantní ve vztahu k VB.NET a vice versa.
Jestliže lze ve VB.NET psát inline kód, proč se to nepoužívá ve VB.NET?
) Buď to nejde a nebo to k ničemu není .
Case-insensitive syntaxe.
Kterou musí opravovat IDE, další ukázka špatné vlastnosti. Vytváří se tak
závislost na IDE, které umí opravovat syntaxi, což vnímám navíc jako pěknou
prudu (myslím že zde nejsem jediný, koho sere, když mu syntaxi opravuje
Word). Navíc já chci, aby se velikost písmen držela zavedených konvencí,
tedy např. název třídy začíná velkým písmenem, její atributy, třeba metody
malým písmenem. Jenže chtít dodržování konvencí od obskurního jazyka jako
VB.NET, to je trochu moc, že? Dále to znepřehledňuje kód a hlavně, brání to
spolupráci s ostatními jazyky .NET, které klidně mohou mít vlastnosti
pojmenované shodně s rozlišením velikostí písmen.
Python typové deklarace nejen neumožňuje, on je ani nepotřebuje. Python
je dynamický jazyk a tohle je přirozená vlastnost dynamických jazyků, ne
nedostatek, jak se snažíš vydávat. S tím překlepem máš pravdu jen částečně,
může se to stát, ale jen v případě přiřazení hodnoty, jinak ne. Což je
menšinový případ. Na druhou stranu svou dynamičností Python umožňuje mnohem
jednodušší konstrukce při práci s daty (viz můj příklad práce s poli i tvůj
komentář, kde to vysvětluješ právě dynamičností Pythonu), čímž se omezuje
počet řady dalších chyb i zpřehledňuje samotný kód, takže celkově to má
kladný přínos. Ne nadarmo se dynamické jazyky považují za další vývojový
stupeň a high level jazyky vhodné pro svou snadnost používání právě pro
laiky a začátečníky.
A dále, Python sice nepodporuje statické typy, které mají hlavně význam pro
optimalizaci a rychlost kódu (za cenu velkých omezení a nepružnosti jazyka)
a na druhou stranu má výbornou podporu dynamické typové kontroly, která
naopak zabraňuje záhadným chybám. Python je jazyk dynamický, stejně jako
třeba PHP, ale zároveň a na rozdíl od PHP má silnou typovou kontrolu. Python
je jazyk dynamický se silnou typovou kontrolou, to je ten správný
kompromis, který vede k snadno použitelnému a bezpečnému jazyku. Statické
typy ve skutečnosti nic neřeší, stačí se podívat např. na jazyk vlastností
přesně opačných, než má Python, na jazyk statický se slabou typovou
kontrolou, na jazyk C a jemu podobných. V těchto jazycích se ve skutečnosti
skrývá řada chyb, které nejsou odhaleny právě kvůli špatné typové kontrole.
Bloky kódu
Ano, v Pythonu se skutečně nemusí řešit, jsou dány přehledně a intuitivně
odsazením kódu. Že to je nejlepší možný způsob dokazuje to, že všichni
programátoři svůj kód odsazují, aby se v něm vyznali, přestože nemusí. A
když už to dělají, proč by se podle toho neměl řídit i jazyk? Vždyť je to
samozřejmé, tahle vlastnost Pythonu je progresivní moderní prvek. Ano,
zkostnatělí programátoři to z prvu nechápou, zdá se jim to divné (sám jsem
si tím prošel), ale zkušenosti mi ukázaly, jak je to ve skutečnosti skvělá
věc.
Tvá ukázka se do Pythonu dá přepsat takto:
class CTest:
def __init__(self):
for i in xrange(10):
if i>5:
print i
Ano, ve VB.NET jde zapnout slabá typová kontrola, dokonce některé knihovny
jsou slabě typované, k čemu to vede viz výše , to je opravdu výhoda.
Dovolím si předpokládat, že ti občas programy moc nefungují, takže vypneš
typovou kontrolu a je to , chápu proč preferuješ takový jazyk, můžeš tak
odfláknout návrh programu, ale to je přesně to, co se v hodinách
programování přesně vyučuje .
Předávání parametrů
má Python vyřešeno, jak nevíš, velmi dobře a lze v něm snadno předávat
nejen parametry jednoduché, ale i klíčové a u obou v libovolném předem
nedefinovaném množství nebo jako volitelné s předdefinovanými hodnotami.
Tudíž přinejmenším se všemi výhodami, které přisuzuješ VB.NET.
Deklarace polí
Evidentně ti stále nedošlo, v čem se VB.NET liší od ostatních jazyků, budiž
to vnímáno jako důkaz, jak VB.NET svou obskurností křiví chápání
programátorům kteří se pak nedokáží orientovat ani v jednoduchých
záležitostech ostatních jazyků. Vydávat to za výhodu VB, kvůli které ho
preferuješ, haha . Ve skutečnosti ho preferuješ proto, že nic jiného
neumíš, na rozdíl ode mne, který s Pythonem nezačínal a přesto si jej vybral
i při znalosti řady dalších jazyků.
Ve skutečnosti zmíněné jazyky také indexují pole od nuly a VB.NET se tím
neliší (konečně), liší se deklarací počtu prvků pole, kdy jeden prvek se
nesmyslně deklaruje jako 0. Tohle není žádná featura, ale chyba, artefakt
VB minulosti, kdy se pole od 0 neindexovala, což byla také ptákovina
nejvyššího stupně, kterou bys dnes také hájil a vychvaloval, kdyby tomu
VB.NET neudělalo přítrž. Jenže ostatní syntaxe VB.NET je s touto změnou
nekonzistentní, což dělá jazyk zmatečný a nepřehledný, což se dá jednoduše
dokázat na ukázce, kterou nebudeš chtít předvést:
Předveď mi program, kterému při spuštění jako parametr předáš libovolně
dlouhý řetězec, který v cyklu for převeď pomocí indexů na pole. Tedy v
Pythonu tohle:
import sys
text=sys.argv[1]
delka=len(text)
pole=[None] *delka
for i in xrange(delka):
pole[i]=text[i]
Jsem si vědom toho, že to jde udělat různě, v Pythonu existují jednodušší
cesty jako např:
import sys
pole=[]
for c in sys.argv[1]:
pole.append(c)
Nebo dokonce jen přetypováním:
import sys
pole=list(sys.argv[1])
Ale já chci, abys předvedl práci s indexy a explicitními rozměry. A
mimochodem, neustále mi připomínáš, že jsem Pytonu vytýkal neohrabanost a
složitost, ale to bylo v době, kdy jsem takový úkol uměl řešit jen tím
prvním způsobem a nebyl si vědom toho, že se škrábu levou rukou za pravým
uchem přes hlavu, i proto jsem svůj názor, kromě řady uvedených důvodů
korigoval.
Syntaxe C# je možná zdánlivě poněkud redundantní, ale to není případ
Pythonu. Krom toho je zajímavé, že Pythonu vyčítáš že je implicitní (což
mimochodem není pravda a nikdy jsi to nepodpořil něčím konkrétním) a nyní
za implicitnost oslavuješ VB.NET . Nevidíš si ani na špičku nosu a
zapomínáš, kde jsi co tvrdil .
Ad nativní a bohaté funkce.
Jak jsi určitě postřehl, tak bohatost a kvalita prostředí byl jeden z
důvodů, který mě přiměl o k tvrzení, že Python je nejlepší jazyk ve své
kategorii, přestože jsem ho ze syntaktického hlediska vystavil, částečně
neoprávněně velké kritice.
Klasické konstrukce jako GOTO...
ani nemusíš psát dál, konkrétně na tento příkaz je uvalena všeobecná
klatba, protože se dobře ví, jaké pohromy dokáže způsobit v nezkušených
rukou laiků a začátečníků. Většina jazyků nahradila tento příkaz nějakou
bezpečnější konstrukcí. Jestli VB.NET ne, je to další z řady důvodů, proč
pro laiky a začátečníky VB.NET ne. Jestli ano, a ty se bez ní stejně
neobejdeš, ukazuje to, že neumíš navrhovat programy a jsi odkázán na tuto
berličku, což ti brání přejít na jiné jazyky. Jak důvod osobní preference
VB.NET to pak obstojí, ale zároveň je to důvod, proč se mají začátečníci
tomuto jazyku širokým důvodem vyhnout a proč není vhodný jako první jazyk
pro výuku programování, stal by se zároveň nedobrovolně i posledním.
Flexibilní větvení pomocí elseif
Je v pythonu implementováno jako příkaz elif. Python jde ale dál a
například rozšiřuje příkaz cyklu while a for o klauzuli else, která umožňuje
rozlišit, zda cyklus proběhl celý (přirozeně) a nebo byl přerušen pomocí
příkazu break a vykonat tak snadno bez používání pomocných proměnných kód
jen v případě, že cyklus proběhl v pořádku. To je jen jedna z mnoha
příjemných pomůcek Pythonu činící programování radostnějším. To samé se
týká i podmínek. Jestli nechápeš v čem je to výhodné, předvedu ti to na
ukázkách a požádám tě o implementaci toho samého chování ve VB.NET. Myslím
že to radši zázračně pochopíš a ukázky nebudeš chtít vidět .
Že srovnáváš neustále VB.NET s C# je hezké, ale porovnávej ho s Pythonem.
Jestli nemůžeš, protože Python neznáš, nechápu, jak se k němu můžeš tak
vehementně vyjadřovat a kritizovat. Co z uvedeného myslíš že Python
potřebuje a neumí? Jak snadno se v Pythonu dělají callbacky pro GUI na
které ty potřebuješ jakési delegáty, což já znám jako jeden ze standardních
návrhových vzorů, ale kdo ví co tím myslíš ty, jehož terminologie je
obdivuhodná, kdy delegáty přirovnáváš k atributům jak nazýváš modifikátory,
to je fakt těžko říct. Jak naprosto snadno a intuitivně se v Pythonu dělají
callbacky jsem ti předvedl, máš-li na mysli něco jiného, předveď ukázku.
Polopatičtější názvosloví je ve skutečnosti bordel v názvosloví. Přesně to,
co jsem (omylem) vyčítal v Pythonu. Jak se ukázalo, v Pythonu bylo nakonec
přesné, ale je to, jak předvádíš, značný problém VB.NET. To je mimochodem
důvod, proč používáš terminologii, které nikdo nerozumí, proč modifikátorům
říkáš atributy, přestože tohle je zavedený pojem v OOP pro členy tříd a
podobně. To je důvod, proč si myslíš, že třídy dědí privátní členy z
nadřazených tříd .
Co se tyče výjimek, tak ty má Python velmi dobře propracované. V první řadě
jsou objektové, takže, každá výjimka je instance nějaké třídy výjimky, což
umožňilo vytvořit stromovou hierarchii výjimek. Mohu tak zachytávat nejakou
konkrétní výjimku, třeba dělení nulou nebo přetečení typu proměnné při
matematických operacích a nebo rovnou celou větev všech aritmetických výjimek
jednou klauzulí, protože třída ArithmeticError je předek tříd
OverflowError, ZeroDivisionError a FloatingPointError. Při očekávání
výjimky ArithmeticError tak zachytím i všechny ostatní aritmetické výjimky.
A dále je možno výjimkám předávat parametry, které mohu používat při jejich
zachycení, jsou součástí instance výjimky, takže nejsou žádné potíže u
vícevláknových programů při zpracování výjimek. Příkaz try/except může
být rozšířen o užitečné else a finaly, kdy finally se provádí vždy i po
zachycení výjimky. Umožňuje to tak na jednom místě uvést čistící operace,
což je výhodné jak z důvodu přehlednosti, tak v případě, že zachycujeme
více výjimek (except je možno uvést v libovolném počtu), abychom čistící
operace nemuseli psát do každé except větve. Else pak umožňuje provést kód
jen v případě, kdy výjimka nebyla vyvolána, což je velmi užitečné v
případě, kdy zachycenou výjimku ignorujeme, ale chceme provést něco navíc v
případě, že nebyla vyvolána.
Že je psaní VB.NET kódu v drahém Visual Studiu pohodlné je pěkné, ale zároveň to
znamená, že bez něj to pohodlné není. Psaní kódu v Pythonu je pohodlné v
každém editoru, který umí odsazovat kód, kterých je přehršle. Jestliže umí
i zvýrazněnou syntaxi, automatické odsazování dle syntaxe nebo
nakonfigurovat horkou klávesu pro spuštění interaktivního interpretu na
editovaný kód, jako to umí třeba editor Vim, je to balada. A jestli se někdo
neobejde bez IDE, které mu doplňuje kód a napovídá, ani to není problém a
to dokonce zdarma.
I pro Python existuje široká podpora a co je ještě lepší i prvotřídní
dokumentace.