Diskuze: Využití jazyka C
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 50 zpráv z 59.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
V čistém C se dá naprogramovat cokoliv, ale třeba GUI se v něm moc dobře nedělá. Programuje se v něm imperativně. To znamená, že výsledné programy bývají rychlé a efektivní, ale ladění bývá zdlouhavé.
Java vychází z C a není problém se učit oba jazyky současně. Alespoň budeš moct porovnávat. V Javě se sice také dá programovat imperativně, ale daleko výhodnější je naučit se OOP, se kterým jde vývoj mnohem rychleji a nasekáš v programu mnohem méně chyb.
Java ti také označí spoustu chyb, u kterých C v klidu mlčí a nechá tě, aby sis natloukl kokos.
V Céčku se dá dělat cokoliv, pouze je to složitější a má horší přístup k programování, ale nejsi ničím omezený. Lepší by bylo C++, vylepšená verze Céčka s pár změnami a mnoha inovacemi včetně OOP přístupu
Samozřejmě mě lákají oba jazyky, jak C tak i Java. Podle toho co jsem slyšel je trošku problém v tom, že u jazyka C, tvořený program vytvořím např. pro OS Windows, ale v případě, jak budu chtít aplikaci i pro Linuxovou distribuci, tak program budu muset přepracovat. Zatímco u jazyka Java, jednou naprogramuji nějaký program, který prý pojede na více platformách naráz. Není v tomto výhodnější Java?
brisingr002:
Chvíli, dokud jsem ještě aktivně využíval Windows, tak jsem programoval v
C++. Opět na nějaké začáteční úrovni. O proti jazyku C mi C++ přišlo
výrazně přehlednější a vyznal jsem se v tom lépe. Jenomže, jak už jsem
se dozvěděl, tak C++ se řadí mezi vyšší prog. jazyky, tudíž se s ním
nedá komunikovat přímo s HW. Pokud tomu tedy dobře rozumím.
C je low level systemovy jazyk. Je velmi jednoduchy, to je jeho vyhoda aj nevyhoda. Oplati sa ho naucit aj ked v nom neplanujes programovat. C ma velmi jednoduche ABI, takze sa casto pouziva ako medzivrztva pri kombinovani roznych jazykov vyzsej urovne.
Co sa tyka c++, tak ten jazyk podporuje aj low level aj high level programovanie (a tak ako c moze priamo vkladat asm) takze aj c++ moze komunikovat priamo s HW. Povodne c++ (C with classes) sa prekladalo dokonca najprv do C (CFront).
C++ podporuje veškeré techniky z Céčka, jakmile se naučíš C++, umíš i C. Jsou zde pouze malé rozdíli jako při používání referencí atd. Díky tomu se zachová jak nový styl programování, tak přímí přístup k HW. Jak píše vitamin, první C++ se překládalo do céčka. Díky tomu se i tak rychle rozšířilo. Nebyli problémy s kompatibilitou.
Pokud napíšeš daný program bez použití systémových knihoven, nemusíš předělávat vůbec nic, pouze použiješ jiný kompiler.
Java je výhodnější než C i C++ dohromady. O tom snad není sporu.
Správně napsané zdrojáky v C jsou přenositelné mezi Windowsy, Unixem i Linuxem. Musí se dodržet určitá pravidla.
V C++ můžeš dělat všechno co v C, plus spoustu věcí navíc.
Záleží na tom, co chce člověk dělat a jak si co oblíbí. Třeba já dám tedy raději přednost C++ před Javou, pokud nepotřebuji GUI.
Dávám přednost Javě před C++, protože chci programovat objektově.
Čisté C se již téměř nepoužívá a i když ti budou lidé tvrdit jak se v tom programují drivery a mikrokontrolery a další minoritní aplikace, stačí se zeptat sám sebe jestli budeš někdy něco takového dělat. Jazyků jsou stovky, v každém se něco dělá a každý je pro něco užitečný. Smysl se má ale učit jen ty, co reálně použiješ. Ve školách se C učí spíše z důvodu zaostalosti našeho školství.
Stretol som sa aj s tým, že sa na škole najprv učí Céčko hlavne kvôli
pochopeniu syntaxe a základných pravidiel programovania. Potom sa však
prechádza na plnohodnotnú Javu. Myslím, že ak už využiť na školách
Céčko, tak práve takto.
To je jen chybný názor, který má za následek zkažení myšlení. Lidé z céčka mají problém programovat objektově a učí se principy, které již u moderních jazyků neplatí.
Hlavně se přechodem z C na Javu všem hodně uleví a začnou si libovat,
jaký je to pokrok proti C
A ty snad píšeš na pergamen? Takovéhle řeči tu vedou jen ti, co OOP nerozumí.
"Dávám přednost Javě před C++, protože chci programovat objektově."
To má stejnou logiku jako když napíšu "Dávám přednost C# před Javou, protože chci programovat objektově."
To by ses divil, kolik různých paradigmat běžně používám. Například GUI se bez OOP dělá dost těžko, ale do databází musíš jít s relační algebrou, jinak ti vznikne paskvil. Na matematické výpočty se zase lépe uplatní funkcionální paradigma, tam s objekty moc nepochodíš. Výstupní šablony jsou zase nejlepší deklarativní. Prostě na každou vrstvu se hodí něco jiného.
Logiku to má už jen v tom, že C++ je pouze objektově orientované, Java je na objektech postavená kompletně.
Nemá, protože C# a Javu považuji za jazyky, které jsou zhruba rovnocenné. C# proti Javě nemá ohledně OOP nic navíc.
Naopak bych řekl, že C++ má více možností, které lze uplatnit v OOP než Java. Co třeba přetížení operátorů,... Mnoho funkcí z C++ lze při správném použití nazývat OOP metodami.
To že ti C++ umožní programovat i jinak než objektově je přeci výhoda, ne nevýhoda, jak je to tu prezentováno.
Již ti bylo řečeno, že Java je kompletně objektová. Stačí se podívat na Hello world v C++, už metoda main je neobjektová. C++ je směsice OOP a strukturovaného programování, něco jako třeba PHP. Java je návrhem mnohem dál.
Já beru tři druhy přístupu ke kódu jako výhodu. Naopak se mi nelíbí ty striktní zásady v Javě a její omezení. Sice je java plně objektová, ale základním datovým typům to akorát škodí podle mého mínění. Navíc se ztratili některé techniky, které např. v C# jsou a jsou hojně využívány.
Rozdíl mezi C++ a Javou/C# podle mě vůbec není v přístupu k OOP (jak mi to přijde, že je tu často prezentováno), oba jazyky OOP umožňují na podobné úrovni.
Hlavní rozdíl vidím spíš v tom, že C++ je jazyk nižší úrovně - člověk se prostě víc nadře, aby napsal kód, který vykoná to samé, ale má nad vším absolutní kontrolu.
Skutečně plnohodnotnou práci s objekty. Můžeš je likvidovat i jinde než tam, kde jsi je vytvořil a nehrozí ti memory leaky. Můžeš dát objekt do returnu metody a to si v C++ bez rizika nemůžeš dovolit. Typová kontrola na vyšší úrovni, kontrola hranic polí, testy jako součást třídy, testování každé třídy bez nutnosti externího kódu,...
Přetížení operátorů je jen syntaktický cukr, který dokáže programátora pořádně poplést. Vyzkoušel jsem si přetěžování operátorů v Pythonu, který je má IMHO ještě vymakanější než C++, ale pak jsem došel k názoru, že všeho moc škodí.
Java má také přetížené operátory. Jen jich má méně.
Když ti jazyk umožňuje psát kód různými způsoby, tak je ten jazyk špatný. Vzhledem k tomu, že moderní jazyky jsou již jen objektové (ty, co někdo používá samozřejmě) tak je vidět, co se osvědčilo a co ne. Všude je snaha o co nejvyšší restrikci, umožnit psát kód jen jedním způsobem, skrývat co nejvíce implementace a podobně. Jedině tak totiž dosáhneš kvalitních výsledků.
PS: Kolik mám mínusek, tolik lidí tu neumí objekty
"Ohodnotil jsi příliš mnoho komentářů za sebou. Pro zachování
objektivnosti hodnocení budeš moci hodnotit až za chvíli. Zkušenější
uživatelé mají nižší omezení."
Počkám si, pak to mínus dostaneš
Jen si ho dej, máš nějak vysokou auru
Minuska nemas preto ze je dakto proti OOP alebo ho neovlada, ale preto ze
pises uplne hovadiny
Spíš si myslím, že ty mínusy jsi dostal od těch, kteří OOP rozumí
Dávám mínusy/plusy podle obsahu komentářů, ne podle nějaké aury
Takže tvrdíš, že je výhodné míchat v jedné aplikaci OOP a
strukturované programování. Zajímavé Určitě je přehlednější
míchat protichůdné přístupy, to je pravda, rozumíš tomu.
Jelikož se o něm bavíme. Poslední byla debata o C++. Opět se asi snažíš překroutit to, co říkám.
Já oba postupy míchám docela často, snažím se brát z každého to co
je pro danou chvíli nejlepší
Jakmile použiješ if, while nebo switch, programuješ strukturovaně.
Jenže jsou tady ještě další paradigmata, která se v Javě či C# běžně používají.
Moderní jazyky jsou prostě čistě v OOP a nemíchají do toho zastaralé přístupy. Můžeme tu filosofovat o tom, co si teď lze představit pod strukturovaným programováním, já jsem tento termín použil ve spojení s C++, kde lze psát plně bez objektů, což je špatně. Jazyk nesmí míchat protichůdné a možná i obecně různé přístupy, které vedou k dosažení stejného výsledku odlišnou filozofií (nezapoměňte tu větu rozebrat). Jako vždy se to tu zvrhlo ve slovíčkaření, takže jdu dělat něco konstruktivního.
[quote]
Moderní jazyky jsou prostě čistě v OOP a nemíchají do toho zastaralé
přístupy
[/quote]
Ako si na to prisiel?
[quote]
Jazyk nesmí míchat protichůdné a možná i obecně různé přístupy,
které vedou k dosažení stejného výsledku odlišnou filozofií
[/quote]
Preco?
To mi zní, jako kdybys znal jen strukturované a objektově orientované programování. Jako kdyby nic jiného neexistovalo. Co třeba funkcionální nebo logické programování? Zkusil jsi to někdy?
Přál bych ti pracovat v PHPčku s kódem 3. strany, který psal někdo tak,
jak mu to přišlo pod ruku a jak to PHP umožňuje. Hned bys to pochopil Třeba na to časem přijdeš
sám.
A pak se divíš, že nesnáším frameworky. Stačí, když no nějakého nakouknu a hned vidím, že ho psalo nějaké programátorské prase.
Tak ono toho existuje hodně V praxi se však používá výhradně OOP a deklarativní SQL. Bude
to tím, že jsou nejlepší. Až budou další paradigmata na takové úrovni,
že se začnou vážně používat a to nejen pro nějaké specifické účely,
tak se o ně teprve začnu zajímat. Microsoft vyvíjí svůj F#, třeba z toho
něco bude.
Zobrazeno 50 zpráv z 59.