Autor | Zpráva | ||
---|---|---|---|
candiess Profil |
Zdravím vás kolegové,
dneska jsem velice hloubal nad syntaxí JS a PHP. Konkrétně mi jde o syntaxi funkcí v těchto jazycích. Ani ne definici funkce jako spíš její aplikování, v PHP se funkcí dává minimálně jeden parametr a to samotná proměnná, kdežto v JS se funkce "připíná" k procesu. Abych byl konkrétní: <script type="text/javascript"> var my_text = "Dneska jsem byl na horách."; var my_split = my_text.split(" "); </script> <?php $my_text = "Dneska jsem byl na horách."; $my_split = explode(" ",$my_text); ?> Doufám, že jste pochopili o co mi jde, chci se tedy zeptat, proč jsou takto odlišné syntaxe? A jak se tyto syntaxe nazývají? Vím, že ta syntaxe co je v JS je i v C++ a nebo ve ActionScriptu. Druhou části otázky bych se chtěl s vámi zamyslet nad tím, proč když PHP f-cím předáváme parametr, není stále na stabilní pozici? Tím mám na myslí, že jako 1. parametr by měla být právě ta proměnná se kterou se bude pracovat. Osobně si myslím, že by se předešlo ztrátě času při lazení nebo přemýšlením nad parametry dané f-ce. Díky moc předem :) |
||
ShiraNai7 Profil |
#2 · Zasláno: 28. 12. 2012, 18:12:03
candiess:
„Doufám, že jsem pochopili o co mi jde, chci se tedy zeptat, proč jsou takto odlišné syntaxe? A jak se tyto syntaxe nazývají?“ PHP nepoužívá pro nativní typy objekty, proto se předávají takhle. |
||
candiess Profil |
#3 · Zasláno: 28. 12. 2012, 18:17:50
ShiraNai7:
Mohu poprosit o rozvedení spojení "pro nativní typy objektů" nebo nějakou vystihující alternatívu? Google mi hází jinčí významy.. „proto se předávají takhle.“ Je ještě nějaký jazyk, kde se předávají takhle? |
||
Radek9 Profil |
#4 · Zasláno: 28. 12. 2012, 18:26:07
candiess:
„pro nativní typy objektů“ Tím se myslí primitivní typy jako string, number atd. „Je ještě nějaký jazyk, kde se předávají takhle?“ Např. C, v tom je taky PHP napsané. Jde o to, že v JS je string i číslo objekt, tudíž se s tím dá pracovat pohodlněji. V PHP si můžeš udělat leda obal, ale práce s tím je dost kostrbatá. |
||
candiess Profil |
#5 · Zasláno: 28. 12. 2012, 18:31:06
Radek9:
„v JS je string i číslo objekt“ Jak to jako myslíš? Mohu vidět příklad? Proměnná by snad měla obsahovat hodnotu, tak proč uvádíš, že v PHP lze udělat pouze obal? |
||
Radek9 Profil |
#6 · Zasláno: 28. 12. 2012, 18:47:42
candiess:
„Jak to jako myslíš? Mohu vidět příklad?“ To nejde úplně ukázat, jde o ten tečkový zápis (v PHP je to šipka). To je objektový přístup. Tzn., že v JS napíšeš tohle: var array = "nějaký textový řetězec".split(" "); $array = explode(" ", "nějaký textový řetězec"); // Tohle nefunguje: $array = "nějaký textový řetězec"->explode(" "); // Musel bys udělat tohle: $array = (new StringWrapper("nějaký textový řetězec"))->explode(" "); „Proměnná by snad měla obsahovat hodnotu“ Hodnotu nebo odkaz na objekt. Při práci s těmi primitivními typy v JS se vytvoří dočasný objekt (něco jako ten wrapper v PHP), ale automaticky, takže se to chová jako objekt. |
||
candiess Profil |
#7 · Zasláno: 28. 12. 2012, 19:14:34
Radek9:
Jojo chápu, děkuji moc za vysvětlení :) Jinak nechceš se nějak vyjádřit k tomu druhému bodu v #1? Docela rád bych znal váš názor. |
||
Radek9 Profil |
#8 · Zasláno: 28. 12. 2012, 19:39:21
candiess:
Možná se mnou někteří diskutující nebudou souhlasit, ale dle mě je to proto, že vývojáři PHP jsou prasata bez kouska citu pro přehledný systém. :D PHP se plácalo narychlo jako jednoduchý scriptovací jazyk. A taky to tak dopadlo. Nikdy to nebylo myšleno jako jazyk pro vývoj větších aplikací. A aby to šlo, tak je tam dost bastlu, kvůli kterému je to totální splácanina. Jestli máš možnost dělat na serveru s něčím jiným (např. ASP.NET nebo Node.js), tak bych to být tebou bral všema deseti. To jsou hezky ucelené a přehledné technologie. |
||
juriad Profil |
ještě přispěji svou troškou z jiného světa: C vs C++
demonstrovat to budu na vlastním typu, který si vytvořím: dvouprvkovém vektoru, který budu násobit celým číslem typedef struct vektor2 vektor2; // jen abych nemusel pořád psát struct struct vektor2 { // dvouprvkovy vektor int hodnota1; int hodnota2; } vektor2 vynasob(vektor2 v, int kolikrat) { // funkce pro násobení vektor2 nasobek; nasobek.hodnota1 = v.hodnota1*kolikrat; nasobek.hodnota2 = v.hodnota2*kolikrat; return nasobek; } předchozí kód funguje v C i v C++, použití: vektor2 vektor = { 1, 2 }; vektor2 trojnasobek = vynasob(vektor, 3); navíc v C++ můžeš definovat vektor2 odlišně (v C ti to neprojde): struct vector2 { int hodnota1; int hodnota2; vektor2 vynasob(int kolikrat) { vektor2 nasobek; nasobek.hodnota1 = hodnota1*kolikrat; nasobek.hodnota2 = hodnota2*kolikrat; return nasobek; } } a použití je nyní jiné: vektor2 vektor = { 1, 2 }; vektor2 trojnasobek = vektor.vynasob(3); Přesunula se jen definice funkce vynasob dovnitř struktury, a přitom přišla o první z argumentů. I v C lze docílit stejné funkcionality jako poskytuje C++, ale trochu krkolomnějším způsobem. upozorňuji, že se jedná jen o demonstraci, takto by se podle některých nemělo v C++ psát, byť to specifikace jazyka umožňuje :) |
||
Alphard Profil |
#10 · Zasláno: 28. 12. 2012, 19:45:30
candiess [#7]:
Jestli uvedete nějaký příklad, možná se ukáže, že různé pořadí parametrů má nějaké zdůvodnění, ale často je to prostě dáno historickým vývojem, prostě je v tom bordel. Jako když se porovná historické centrum starého města oproti pravidelným kolmým ulicím v nějakém nově založeném. Radek9 [#8]: Hostingů pro jiné jazyky je méně, ale existují. Každý má možnost volby, ale nemusí to být automaticky výhra. U větších projektů fakt nejde o syntaxi. |
||
candiess Profil |
#11 · Zasláno: 28. 12. 2012, 20:13:46
Alphard:
co třeba array_slice(), kde prvním parametrem je samotný vstup a naopak u explode(), str_replace(), substr() ,... jsou vstupní parametry až na konci. Je to jen filosofická otázka, proč nejsou vstupy jako 1 parametr, když jsou povinné? juriad Děkuji za vysvětlení, ale C ani jeho odvětvím nehovím, takže příkladu vůbec nerozumím, ovšem chápu, co jste mi chtěl naznačit, díky Radek9 Díky, přečtu si o tom ;) jinak s tou splácaninou celkem souhlasím, proto PHP budí celkem dost otázek i těm zkušenějším. |
||
ShiraNai7 Profil |
#12 · Zasláno: 28. 12. 2012, 20:15:26
candiess:
„Je to jen filosofická otázka, proč nejsou vstupy jako 1 parametr, když jsou povinné?“ Protože PHP. Názvosloví funkcí ani pořadí parametrů se neřídí podle jednotné konvence. Je to jedna z věcí, co mi na PHP vadí. |
||
Časová prodleva: 3 dny
|
|||
Tori Profil |
candiess:
„Druhou části otázky bych se chtěl s vámi zamyslet nad tím, proč když PHP f-cím předáváme parametr, není stále na stabilní pozici?“ IMHO je to tím, že céčko bylo zkonstruované, od začátku vznikalo se záměrem, že to bude jazyk s určitou strukturou, logikou (-li se nepletu). Kdežto PHP vzniklo jako šablonový stroj a až později dostalo ambice stát se prog. jazykem. Vyvíjelo se živelně jako lidské jazyky, proto i v něm zůstaly nepravidelnosti (jako psaní s/z, mě/mně a kopec výjimek z pravidel v češtině). Jedna polemika za všechny: PHP: a fractal of bad design a reakce J. Vrány |
||
weroro Profil |
candiess:
„Vím, že ta syntaxe co je v JS je i v C++ a nebo ve ActionScriptu.“ To bude tým, že ActionScript je odvodený práve od Javascriptu. Ak by si chcel napr. v spomenutom ActionScripte vytvoriť novú funkciu, ktorá by sa zapisovala za názvom premennej nieco.funkcia() , musel by si si vytvoriť prototyp daného objektu (= prototype).
napr. prototyp na druhú mocninu: Number.prototype.mocnina = function ():Number { return Math.pow (this, 2); }; var cislo = 2; trace (cislo.mocnina ()); // 4 |
||
Radek9 Profil |
#15 · Zasláno: 1. 1. 2013, 20:05:29
weroro:
„musel by si si vytvoriť prototyp daného objektu“ Ne, ten prototype už tam je, ty jen vytváříš jeho novou vlastnost. |
||
Časová prodleva: 11 let
|
0