Diskuze: Rozdíly mezi C# a PHP
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 50 zpráv z 93.
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
U jazyků C# a PHP naopak vidím velkou podobnost. Ty dva jazyky se zas tak moc neliší.
Já to myslím z pohledu výsledných věcí k čemu ty jazyky jsou. Jestli porovnáváš C# jako ASP a PHP, tak je to pak něco jiného.
"U jazyků C# a PHP naopak vidím velkou podobnost. Ty dva jazyky se zas tak moc neliší."
Uh, to bylo myšleno vážně?
Takhle, co mi nabídne víc? Co je používanější? A hlavně v jakých
oblastech? Co je rychlejší? Co se dá lépe rozšířit o další dodatky
(myslím něco jako moduly, v php)? Nebo jestli je toho tam tolik že to asi
není potřeba, nevím..
O podpoře se asi ani bavit nemusíme, to vím jak na tom je v česku C#,
bídně, tedy povětšinou co vidím na hostinzích..
PHP ti nabídne PHP a C# ti nabídne C#. Je tu o obou jazycích napsáno nejméně stovka článků a dalších 3oo threadů se stejným podnětem.
Jak můžeš říct, že je na tom C# bídně, když vlastně ani nevíš k čemu ten jazyk je a neumíš napsat ani hello world ?
On myslel podporu ASP na free webhostinzích pokud jsem to pochopil správně.
A ano, opravdu jsem myslel podporu na hostinzích, ne samotný jazyk, nevím
jak to s ním je, ale vím že běží jen pod windows...
A s těmi hostingy, nevím nevím, moc jsem to nezkoumal, ale stále o tom
pořád někde čtu jak si někdo stěžuje že s podporou C# na webhostinzích
jsme na tom v česku celkem bídně, tak je dobré to vědět od někoho
dalšího..
Mě zarazilo to, že porovnáváš C# a PHP. Každý jazyk má nějaké tostring, proměnné, objekty... prostě nějaké paradigma, podle kterého se v tom jazyku programuje.
Nejde říct který je výhodnější. Každý jazyk má něco jiného, hlavně porovnávat tyto 2 je naprostá hloupost. PHP běží někde na serveru a nejčastěji se v něm dělají dynamické weby. C# běží pod nějakým frameworkem a můžeš v něm dělat prakticky cokoliv. V PHP nedělám, ale běží na straně serveru, zatím co k C# ti stačí .NET framework a to je vše, co potřebuješ. V C# si můžeš udělat třeba dektopovou aplikaci, velký informační systém, web, službu nebo taky aplikaci na mobil nebo tablet.
Vezmi si, jak je ASP mohutný nástroj, samotné weby od MS na něm běží a ty to srovnáváš s PHP, které umí kde kdo. (Myslím i ty, kteří říkají, jak něco umí a přitom neumí nic. Ale snaží se o to, takže to má nějakou větší komunitu)
K tomu taky patří hostingy, ASP není zas tolik tolik rozšířené.
Nejčastěji se dělají malé weby a když ho máš dělat dynamicky, tak ho
uděláš v PHP nebo nějakém frameworku založený na PHP. A teď si srovnej
kolik máš malých webů v PHP a kolik v ASP. Někteří s PHP začínají jako
první jazyk, začít s ASP jako první programovací jazyk by byla sebevražda
Btw, to, proč je ASP hostingů málo je možná i proto, že to běží jen pod windowsáckými servery (podívej se na Linux vs Win Server v %) (Ano, je tu Mono, ale to nepodporuje full ASP.NET)
Ano, myslel jsem to vážně. Syntaxe C# a PHP je skoro stejná, oba původem vychází z C a jsou to objektové jazyky. Metody ToString a __toString dělají to samé.
Rozhodně jsou si ty dva jazyky podobnější, než např. Lisp vs. Prolog vs. XSLT.
PHP běžně používám pro vytváření aplikací na desktopu. Kde jsi přišel na to, že se k tomuto účelu nedá použít?
A z diskuze o historii se opět staly dohady o jazycích... Ale souhlasím, že PHP a C# jsou si podobné.
Podobná si je Java a C#, ale podobnost C# a PHP končí někde v tom, že jejich syntaxe vychází z C a jsou oba imperativní.
Spousta syntaxe se dost liší a každý z nich funguje úplně jinak pod pokličkou, takže říct, že jsou podobné může jen někdo, kdo je viděl jen z rychlíku.
Tohle může napsat jen ten, kdo viděl ostatní programovací jazyky jen z
rychlíku
Například Fortran se od C syntakticky liší na první pohled dost výrazně, uvnitř je prakticky stejný jako jazyk C. Dokonce mají společný kompilátor.
Že některé jiné jazyky jsou ještě rozdílnější neznamená, že C# a PHP jsou jazyky podobné.
PHP je jazyk určený víceméně jen pro tvorbu webů, C# se hodí i pro desktopové aplikace, desktopové hry.
Řekl bych, že PHP je o něco jednodušší pro začátečníky - v proměnné můžeš mít cokoliv, (v C# to sice jde v podstatě taky, ale není to běžný postup, ale zase je v PHP větší šance zanesení chyby), nemusíš používat OOP (V C# nenacpeš funkční kód mimo třídu, v PHP nemusíš pro základy OOP znát vůbec, protože tam spousta staršího kódu zbyla z dob, kdy PHP třídy neumělo).
PHP je pomalejší, je to interpretovaný jazyk, i když už existují i kompilátory pro PHP, ale na nativní kód (C#) to pořád nemá.
V PHP se dají vytvářet nejen HTML, ale i DOC, XLS, PDF, JPG, PNG a spoustu dalších souborů. Rychlost jejich generování si nezadá s C#. Zřejmě s PHP neumíš dělat.
V C# také nemusíš používat OOP. Běžně vídám imperativně napsané programy v C#, které s OOP nemají nic společného.
Ano, běžně používám pro tvorbu tebou vyjmenovaných dokumentů program
napsaný v PHP
Samozřejmě, že to umí, ale většinou to využiješ jen pro tvorby reportů na nějakém webu apod.
Rychlost PHP si nezadá s C#? Možná když využíváš nějaké knihovny napsané v jiných jazycích, ale pokud máš nějaký výkonný kód v PHP, tak bude na C# ztrácet.
OOP nemusíš používat skoro v žádném jazyce, když nechceš, ale v PHP
je to mnohem jednodušší než v C#, protože i v běžném PHP je spousta
často používaných funkcí, které k žádnému objektu nepatří.
V C# skoro každá funkce má svoji odpovídající třídu, takže musíš
aspoň umět tu třídu vytvořit apod.
HTML můžeš vygenerovat snad ve všem, vždyť je to jen text. Nevím proč pokaždé musíš argumentovat totálně nesmyslně.
V PHP se toho výkonného kódu moc nepíše a když se zbavíš podmíněných větví a cyklů, tak je PHP i rychlé. Chce to jen nedělat ty zbytečné cykly a větvení.
V C# nemusíš umět třídu vytvořit. Stačí jen vědět, že zdroják musí začínat slovy "class Program". Zbytek může být procedurál. Nikdo tě v C# k OOP vůbec nenutí, můžeš používat běžné procedury a funkce a vystačíš si. Samozřejmě jak na co.
Dobře, ale pořád to je jak kdybys porovnával PowerShell a Batch. Ty dva, se alespoň na jednom schodnou. Zatím co C# a PHP ne. To co říkáš bys mohl říct o každém jazyku. Java tě snad nutí k tomu co říkáš ?
Když se zbavíš cyklů a podmínek, co ti pak zbyde ? Rovnou to už můžu napsat přímo a nemusím chtít po PHP, aby mi vytvořilo soubor a napsalo do něj string, co jsem dal do PHP a pak zavolal f-ci, na uložení do souboru.
Když se zbavím cyklů a podmínek, zbyde mi krásný PHP kód bez cyklů a větvení. V PHP totiž na rozdíl od C# z velké části nejsou potřebné. Používají je hlavně programátoři zvyklí na jazyky odvozené z C, protože to neumí udělat jinak.
Jistěže jsou mezi PHP a C# rozdíly, ale programy jsou většinou poměrně snadno převoditelné. Jen je C# o něco ukecanější.
Takže nikdo vlastně neumí programovat, protože využívá podmínky a cykly.
Bez těch cyklů, by to při větší námaze ještě šlo. Ale programovat bez podmínek, to už člověk musí být jinde, aby to zvládal.
Kite, zkus někdy naprogramovat něco složitějšího, než čtení hodnot z
DB a jejich vypsání na obrazovku, třeba zjistíš, že se bez cyklů a
podmínek při programování čehokoliv složitějšího neobejdeš a nebudeš
psát takovéhle hovadiny...
Když to vezmu fakt zhurta, tak v cyklu máš taky podmínku
EDIT: Jo tys to psal naopak, tak pak beru z5
Čistě ze zvědavosti by mě zajímalo jak se dají následující úlohy dělat bez podmínek a cyklů
3)Update všech objektů (Člověk) v určité kolekci a podle toho zda má property Pohlaví(typu enum) nastavenou na Muž tak vypsat "Jsem muž" a když Žena vypsat "Jsem žena"
Nechci vyvolávat hádky, spory ani nijak provokovat, čistě ze zvědavosti
měl jsem namysli funkce array_map, array_reduce(a další). Pak v mnoha případech nepotřebuješ použít klasické cykly a máš přehledný kód.
Dále jsou zajímavé metody: array_filter() a str_repeat(). Prostě v tomto
směru to má php dobře udělaný
V PHP nedělám, takže mi to nic neříká ale stejně, pořád se to interně
chová asi jako cyklus, ne ?
V C# Taky můžeš napsat IList.ForEach( Action<T>) a další věci, co sice nevypadaj jak cyklus, ale cyklus to je.
Ale tak to nejspíš kit myslel. Prostě odstraníš z kódu svoje cykly a budeš používat výše zmíněné věci. Kód je poté takový hezčí a zápisy jsou kratší.
1.
asort($data);
Nebudu implementovat něco, co už je součástí jazyka. Bubble sort se dá
udělat rekurzí, ale moc užitečné by to asi nebylo.
2. rekurzí
3.
<?php
$kolekce = array(
'Adam' => "Muž",
'Božena' => "Žena",
'Cyril' => "Muž",
);
echo implode("\n", array_map(function($osoba, $pohlavi) {
return "$osoba je " . ($pohlavi=="Muž" ? "muž" : "žena");
}, array_keys($kolekce), array_values($kolekce)));
Podmínka zde samozřejmě je, ale není zde větvení ani cykly.
Nevím jestli je annonymní metoda přehlednější než pár podmínek, které v tom stejně budeš muset použít. Ofc můžeš použít klauzuli where ... Wait. To nemá cenu, tohle neobkecá.
Nevím jak by Call Stack vypadal, když bys měl kolekci o třeba 1000 prvcích. Dostal bys vyjímku a můžeš zkoušet dál.
Ok díky Jasně řazení si
také nebudu psát když je součástí jazyka. Ale je to odvážné tvrzení
že lze psát bez cyklů a podmínek, při větších aplikacích, kde je hodně
algoritmů (zejména hry) se cyklům a podmínkám jen tak vyhnout nedá
(netvrdím že to možné není)
Mě by zajímalo, jak Kit píše algoritmy, na které v jazyku nejsou už hotové funkce.
Nejspíš nijak, protože to ještě nikdy nedělal.
Naprosto v pohodě. Nacpal jsem do toho 5 M lidí a zvládlo to.
Základním pravidlem, které jistě znáš, je nevynalézat kolo. Takže místo šíření FUD by sis raději měl otevřít manuál.
Úplně bez větvení a cyklů to určitě taky nepůjde, některé věci to prostě vyžadují, ale spousta kódu by se určitě dala sepsat kratší a přehlednější cestou, o tom nepochybuji...
Kit: Jen by mě tedy zajímalo jak bych mohl pomocí PHP jednodušší cestou vypsat hodnoty z databáze, když jich je třeba větší množství (dejme tomu 10), tak abych je přiřadil postupně do pole bez cyklu? Zatím jsem buď nenarazil na funkci která by to uměla nebo mě nenapadá jednodušší cesta.
Tím lépe ne? Potom ty funkce budou implementované v interpreteru, a budou tudíž rychlejší, protože jsou kompilované pokud se nemýlím ne?
//EDIT: Myšleno tak jako že našel a dokázal využít již hotové funkce interpreteru, a zatím nepotřeboval nikdy napsat vlastní protože vždy nějakou cestu našel
Interně to samozřejmě cykly jsou, ale běží už na úrovni strojového kódu, tedy podstatně rychleji. V C# jsou rychlé i ty cykly, takže u něj už k nějakému výraznému zlepšení nedojde, ale pro PHP to představuje významné přiblížení k rychlosti kompilovaných jazyků.
Nedávno jsem to sem posílal:
http://www.itnetwork.cz/dev-lighter/275
Znovuvynalézám kolo?
Jasně, můžu všechny algoritmy jen postahovat a slepit dohromady a možná
nebudu muset žádný cyklus ani použít, jako to děláš ty.
U jednoduchých aplikací, které lepíš ty, ti to stačí, protože hotové
řešení už vždy najdeš, ale až budeš psát něco méně obvyklého,
narazíš na problém, protože google nepomůže a bez cyklů a podmínek to
napsat nepůjde.
Mimochodem, algoritmus vlny rekurzí - ano, rekurze se na tomhle algoritmu někdy ukazuje, ale jsou i efektivnější způsoby, než tohle plácání výkonem...
Ono toho ty jazyky umějí spoustu, ale stejně při psaní něčeho složitějšího občas narazíš na něco, co ještě ten jazyk nebo jeho knihovny nijak jednoduše neumí.
S tím počítám, že jsem ještě neobjevil plné možnosti, jsem zvyklý
na styl C, nebo Assembleru, co nemáš napiš si, a co nemáš? Prakticky
všechno...
Nic není neomezené, vždy jednou dojdou možnosti, každopádně pokud se tak
stane tak se tomu vyhnout moc nedá... Leda si napsat modul pro PHP a tam to
implementovat, a vyhnul by jsi se použitím toho, ale nevím do jaké míry je
dobré používat moduly v php.
Raději využiji arzenál, který už je součástí knihoven jazyka, než abych stahoval nějaké frameworky.
Pokud budu chtít vygenerovat tabulku ASCII, tak se nejspíš bez cyklu neobejdu (i když...), ale na zpracování seznamů a tabulek cykly opravdu nejsou potřebné.
Mentální bloky skutečně bývají značné. Velmi často vidím
mysql_connect(...) or die(...)
ale ještě nikdy jsem neviděl
mysql_connect(...) or throw new Exception(...)
Proč?
Zapomněl jsem dodat, že PDO mi celý SELECT dodá jako dvourozměrné pole, seznam slovníků nebo seznam objektů dle mého přání. Stačí místo metody fetch() použít metodu fetchAll().
Jasně, já taky ten arzenál využívám, ale jak třeba bez cyklu proiteruješ všechny pixely bitmapy (třeba když chceš spočítat počty výskytů barev), aby ti zůstal rozumný výkon?
To možná vyřešíš foreachem, pokud se ti podaří z bitmapy nějak vytřískat IEnumerable, ale když budeš řešit něco, kde do těch pixelů budeš chtít i zapisovat?
S tím PHP kódem netuším, s PHP jsem skončil někde před 4 roky a moc jsem ho neovládal.
Zobrazeno 50 zpráv z 93.