php nyelv magyarítása?
Érdekelne,hogy a php-ban a függvények nevét szeretném átírni magyarra otthoni munkákra.
Hol találok hozzá valami jó dokumentumot?
■ Hol találok hozzá valami jó dokumentumot?
H | K | Sze | Cs | P | Szo | V |
---|---|---|---|---|---|---|
28 | 29 | 30 | 31 | 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 1 |
nem firtatom, hogy tényleg jó dolog-e ez
Nem mukodik
Forrás
Azt ne felejtsd el, hogy bármilyen függvénytárat, keretrendszert használsz, az utána nem fog működni, ha megváltoztatod a függvények nevét.
Egyáltalán mi a célja az egésznek?
Szerintem látott valahol egy
Egyébként engem is érdekelne, mit akar vele, mert gyakorlati értelmét nem látom. Mire átírja magyarra az összes azonosítót, egyrészt kijön két újabb verzió, másrészt addigra épp megtanulja az összes angol nevet és mehet a kukába a magyarítása ("otthoni munkára")
Rendben
Na tehát az van, hogy idén nekem érettségi, és van nekem arra lehetőségem, hogy a php nyelvet válasszam így arra a döntésre jutottam, hogy php lesz, úgy is érdekel a dolog meg minden.
van 1 évem elkezdeni az egészet, foglalkoztam már php-val eléggé sokat, de komolyabb dolgokat nem csináltam vele.
Na és akkor most jönne a kérdés nekivágjak ennek, 1 év alatt sikerülhet az alábbi tervem, de ha nem akkor sem gond legalább jó gyakorlási feladatokat kapok.
Elképzelésem, hogy írok egy online stratégiai játékot természetesen egy butított változatot egyszerű kattintgatós játék lenne a következő funkciókkal.
Első és nem utolsó sorban: belépés, regisztráció, jelszó emlékeztető, ez a külső rész.
Játék magja tartalmazná : Főoldal, profil, profilszerkesztés, banda, bank, küzdelem, box, rablás, autólopás.
Ezek lennének a főbb funkciók az oldalon, így első ránézésre nem is tűnik olyan vészesnek mert nem is az, megoldható egy kis tanulással.
Igaz a védelemmel és az OOP-sal nem vagyok tisztában.
Szerintetek?
Igaz a védelemmel és az
Szerintetek?
Hát az ügyben nem tudok nyilatkozni, hogy tisztában vagy-e velük.
Maga a feladat tűnik nagyon komplexnek a rendelkezésre álló időhöz képest, és meg is valósítható PHP-val. Persze nem tudjuk, mik az egyes funkciók. Nem derült ki, mi a banda, box, kűzdelem, rablás, autólopás és a külső rész.
Mondjuk előbb talán jó lenne a központozás használatát is mélyebben elsajátítani, mert nagyon nehézzé teszi a mondandód elolvasását a hiányuk illetve nem megfelelő használatuk.
Mondjuk előbb talán jó lenne
Horribile dictu megbuktatnak a magyarérettségin :)
A helytelen írás
Na és,
Ellenben azt gondolom, hogy mostanában igen keveset beszél-ír magyarul, ami nem jó.
Ki beszél itt Poetroról? :)
Nem te?
Ha valamit nagyon elnéztem, akkor bocsi, de lehet inkább te voltál félreérthető... :)
Mindketten Szita úrhoz
Nézd, szerintem amíg nem vagy
Én azt javaslom, kisebb feladatokat, projekteket csinálj, amiket viszonylag gyorsan befejezel, esetleg könnyen újra is tudsz írni, ha már többet tudsz és szükségét érzed. Olvass sokat (angol nyelv nagyon kéne), tanulj sokat, gyakorolj sokat, tanulmányozd népszerű projektet kódját.
Kódszervezésre tudsz
Én a netről gyűjtögettem az
Igazából az egyetlen szakmai könyv, amit valaha elolvastam, az a Javascript The Good Parts a jó öreg Crockfordtól, de az nem kódszervezésről szól, legfeljebb érinti.
clean code
Valami nagyon alap szinten
Ami talán a legfontosabb, hogy tanulj angolt ezerrel! Anélkül még a manualt sem fogod megérteni, nem hogy programozni valamilyen keretrendszer alatt...
Tehát szeretnél infóból
Ellenben a többiekkel én azt mondom, hogy állj neki. Régebben én is úgy voltam vele, hogy volt egy ötletem, neki álltam, ha valami nem ment akkor változtattam a terven, de legalább szerettem és csináltam :) Amíg nem megrendelésre dolgozol addig ezzel szerintem nincs is semmilyen probléma. Ahogy előttem írták a spagetti/lélekölő kód az lesz, de anno ezzel valahogy nem volt problémám, változtattam a terveken :D
Legnagyobb projektem még érettségi előtt egy mászkálós játék volt. Tipikus felül nézet, graf összeszedve netről. Még pályaszerkesztőt is csináltam hozzá :D Sokból végül is nem állt kezdőpont, cél, fa(mint akadály), doboz(mint mozgatható akadály), levél (amit össze kellett szedni). Először amikor neki álltam csak kezdő, végpont, fák voltak, végén - mivel nem volt nehéz megoldani - jöttek a fentebb felsoroltak. Szerettem volna bele kapukat amiket különböző színű kulcsokkal lehetett volna nyitni, de mivel sok mindent át kellett volna írnom hozzá (nem a legtutibb struktúra) így ahhoz már nem volt kedvem (na bumm!). Azért csináltam mert élveztem. Ha neked sincs más célod vele akkor kezdj bele és legyél rugalmas a terveiddel kapcsolatban :) Anno ezzel elvoltam jó ideig (az megmaradt, hogy volt egy olyan nap amikor reggeltől estig a gép előtt ültem és csináltam), nem rég neki álltam C#-ban és 2 óra alatt kb meg volt, igaz csak konzolon, de a struktúra sokkal jobb :D
Miért várják el a tanárok, hogy a diákok megértsenek megoldásokat amiket olyan problémákra hoztak létre amivel a diákok még nem találkoztak?
szerk.: így, hogy látom miért akarod: ne akard átnevezni a php függvényeit :D
+1
(: az első (na jó második) oldal amit majdnem megcsináltam táblázatos volt természetesen, de annyira nem futotta, hogy táblázatokat egymásba lehet ágyazni, így komoly rowspan és colspan matek volt benne, mire összeállt egy-egy layout :D
aztán voltak egyéb cudar dolgok is.
a lényeg, ha teheted próbálj meg (több) csapat tagja lenni, józan paraszti ésszel úgyis rájössz, hogy kitől érdemes tanulni, próbálj meg saját megoldásokat létrehozni, és kóstolj bele frameworkokbe is.
ha akarod csináld, nem kerül semmibe az idődön kívül.
Tehát szeretnél infóból
Én épp ezért mondom azt, hogy felejtse el, hogy érettségin mást használ, mint amit tanítanak neki, ami majdnem biztos, hogy Pascal. Én is kalandvágyó ember voltam, én ugyan nem fogok egy ilyen nyelvet és főleg egy ilyen IDE-t használni, nekifutottam a C++-nak. A vizsgahelyen derült ki, hogy az IDE-nek nincs olyan billentyűsémája, amiben valamely viszonylag fontos írásjelet (
{
) eredményező billentyűkombináció ne dobna fel egy ablakot, meg például futtatáskor nem nyíltak meg a fájlok, így vakon kódoltam le az ezen alapuló feladatot. Már amit le tudtam kódolni, mert nem biztos, hogy ment az algoritmus. És még csak fel sem ismertem akkoriban, hogy hány- és hányféleképpen törheti össze magát az ember C++-szal.Tehát nem, semmiféleképpen nem ajánlom, hogy PHP-t használj az érettségin. A legkevesebb, hogy senki nem lesz, aki felkészítsen, és hogy nem nézegetheted a php.net-et vizsga közben. De számíthatsz rá, hogy nem fog sikerülni összehozniuk egy működő környezetet a vizsgahelyszínen, és nem egy kellemes élmény, amikor ezzel szembesülsz, és elkezdődik a hercehurca. Továbbá a PHP, mint gyengén típusos és meglehetősen következetlen nyelv közel olyan veszélyes egy kezdőnek, mint a C++, mert a logikát, mint segédeszközt kidobhatod az ablakon, a fordító pedig semmilyen segítséget nem fog adni a hibák felderítésében. Mindezen felül pedig egy webalkalmazásban (legalábbis egy naiv megvalósításban, amit kezdőként írsz) töredékét sem fogod használni azoknak a technikáknak, algoritmusoknak, amikre szükséged lehet a vizsgán.
Összefoglalva: még ma telepíts fel egy népszerű Linux disztrót (magyarul Ubuntut), tanuld meg az érettségiig magabiztosan használni; tanuld meg a Pascalt a-tól z-ig (nem nehéz, mert sokkal összeszedettebb nyelv, mint mondjuk a C++); használj hozzá valami jó kódszínező szövegszerkesztőt és parancssoros fordítót, véletlenül se az elcseszett IDE-ket; és vegyél egy alapozókönyvet algoritmuselméletről.
A fentieket nem kötelező megfogadni, de én ezt tanácsolnám magamnak ma, pedig én már programozgattam pár éve, amikor érettségiztem.
Kérdés, hogy tanítanak-e neki
Szita Szilárd: tanulsz suliban programozni valamilyen nyelven? Ha igen milyen nyelven?
Ubuntun anno próbáltam Lazarust - mert kellett egy IDE amibe össze tudok húzogatni -, ebből a tapasztalatból kiindulva kiindulva meg abból, hogy egy kezdőnek néha milyen fejtörést tud okozni a linux jobb ha WINen marad amit gondolom használ mindennapokban :D
Van olyan könyv ami jó is és nem a tipikus régi módszer szerint próbálkozik? (Agyhullám - HeadFirst - féle tanítás sem jött be).
Ilyen könyvről is elfogadnék ajánlást :)
Ubuntun anno próbáltam
Itt kifejezetten - bár
Linux egy kezdőnek még mindig tud fejtörést okozni pl win-en egy wampot feltenni next-next-finish linuxon pedig, hogy fájlokat tudj másolni a LAMPP által létrehozott könyvtárba (/opt/lampp/htdocs) már google és terminál kell.
A Linux jó, a linuxot szeretjük, de ha szeretnél rajta fejleszteni több tudás/kalandvágy kell, mint a winhez. (nem is baj :D)
Ubuntu legutóbbi kiadásaival nem vagyok kibékülve :) Első találkozásom vele még a 8.04 volt, XPhez képest elmondhatatlan volt a különbség. Gyors bootolás, testreszabhatóság, stabilitás, látvány és még azt hiszem lehetne sorolni. Otthon a nem pozitív változásoktól függetlenül még mindig ubuntuzok, de keresek egy jobb disztrót :)
Kifejezetten hangsúlyoztam,
Ha egy sima szövegszerkesztőt használsz és egy parancssoros fordítót, akkor csak azt az egy parancsot kell tudd, amivel fordítasz.
Windows-on viszont csak az IDE-k dívnak, ezért mondtam, hogy tanuljon bele egy desktop Linuxba.
Igen láttam és ezt olvastam
Egy kezdőnek (anno én így voltam vele) sokkal idegenebb lehet parancssorozni. Főleg Pascalhoz (írtad, hogy valószínűleg ezt tanítják neki) amilyen IDE-t használtunk nem volt sok probléma a configgal (emlékeim szerint).
Sima szövegszerkesztőbe nem tudom mi fér bele, de kód kieg életet ment(het ) főleg érettségi alatt.
Ha PHP-t nézünk akkor teljes mértékben megértem azt, hogy próbálod elterelni ezektől :)
Ja, ebben szerintem igazad
Ubuntu - fenének
- Se kódkieg., se semmi, de:
- Help a parancsokhoz,
- Menüből ellenőrzöl, fordítasz, akár futtatsz is,
- A suliban (érettségin) megnézném, hogy van-e Linux.
És ne felejtsük el: nem 1 év, hanem egy nem egész tanév áll rendelkezésre. Ha már Pascal, akkor valami ősi, de nem parancssoros fordító, nem tud mit kezdeni a hibaüzikkel,ha egyáltalán vannak. De ma már nem lennék meglepve, ha nem Pascal menne + nem mondta, hogy tanítanak-e valamit e tárgyban, gőzöm sincs a mostani érettségi szabályokról, lehet tök önállóan készül ebből.
Ja, és gondolom nem ez az egyetlen, amiből le szeretne érettségizni...
Turbo Pascal
Kisfiú! Én a munkahelyemen
Több időt eltölt a
Igen, egy ilyen környezet volt az, ami miatt meggyűlöltem a Pascalt. Pedig nem a nyelvvel volt a baj, hanem a konstans wtf érzéssel.
?
Az megy.
Ez a kurva popszakma már csak ilyen.
Inkább óvakodjon attól a
A linux-szal legalább megy valamire, olyan tudás, amit aztán remekül fog tudni hasznosítani. Ha már vihet pendrájvot az érettségire, akkor ennyi erővel egy livecd-t is készíthet.
Ha már vihet pendrájvot az
Szögezzük le, hogy ilyet nem lehet, mielőtt még valaki tényleg beállítana érettségire bármilyen adathordozóval.
Felmásolod egy pandrive-ra és
Ilyen természetesen nincs, egy listáról választhatsz operációs rendszert, nyelvet és fejlesztőkörnyezetet.
Nekem nem annyira természetes...
Elnézést, de én '92-ben érettségiztem, utaltam is erre, hogy nem tudom, mi van a mai érettségin... Annyit tudok, hogy már '94-ben egész más szabályok voltak.
A Linuxnak - kizárólag az érettségi szempontjából - továbbra sem látom értelmét, persze hasznos beletanulni, ugyanúgy, mint úszni tudni is hasznos, de azt gondolom, hogy itt az elérhető eredmény és a befektetett idő/energia a fontos. Kérdéses is - úgy látom te tisztában vagy vele -, hogy az adott lista most elérhető-e (gondolom igen), és abban szerepel-e a kívánatos rendszer, stb. Ezzel együtt - szerintem - a Linuxra bőven ráér főiskolán / egyetemen, ha ebbe az irányba megy, akkor ott úgyis kötelező lesz.
Azt viszont hallom jónéhány ismerőstől, hogy a mostani érettségizőknek semmire sincs idejük, ha jól akarnak felkészülni. Emiatt én a helyében hanyagolnám egyelőre a Linuxot, nem az a feladat.
Egyébként nem tudom, manapság
Mondjuk az egész érettségi röhej volt :).
Ez közép vagy emelt szint
Akkor még nem volt ilyesmi
Tényleg :)
A lista minden évben előre
Ami a Linuxot illeti: egy Ubuntu használata semmivel sem igényel több tanulást, mint Mac-re, Androidra vagy bármi másra váltani. A lényeg az, hogy ne a vizsgán csodálkozzon rá a Unity-ra.
Ezen felül az alapvető parancssori készségeket sajátítsa el, ez nem igényel többet egy-két nap gyakorlásnál.
Cserébe egy sokkal egyszerűbb és sokkal megbízhatóbb fejlesztői környezetet kap, mint ha egy windows-os IDE-t, vagy a helyi rendszergazda által felhúzott Cygwint használná.
Lassan meg lesz :)
Én ebből az egy szempontból vitatom másik oprendszer tanulását, mivel valamelyik win-t biztosan használja. Csak időt spórolnék neki.
IDE-ről nem vitatkozom: én használok, win alatt, pont.
De ismered programozni-tanulásról is a véleményem: első helyen assembly. Ha ott nem vérzik el (nem adja fel, továbbjut a Hello world-ön: mondjuk egy bitképet fájlból ki tud rajzolni a képernyőre), akkor jöhet következő nyelv. Assembly-hez aztán tényleg csak árt egy IDE, nem is tudom létezik-e hozzá.
Ez azt jelenti, hogy nem
Nem, természetesen vizsgázhat Windows-on, a legtöbben azon vizsgáznak. Az én véleményem azonban az, hogy a legkönnyebben használható, zéró-konfigurációs fejlesztői környezetet egy Linux adja.
Az, hogy érdemes-e IDE-t használni, az preferencia kérdése, én nem szeretem őket, más igen. Itt azonban egy kezdőről és egy vizsgáról van szó, egy IDE pedig csak még egy dolog, amit oda-vissza ki kellene ismerjen, márpedig ez nem fog menni. Tapasztalatból beszélek, nekem ugyanis eddig még nem volt olyan tanítványom, aki ne küzdött volna az IDE-vel (ezoterikus hibák, linkelési bizonytalanságok sít.), amihez minden jobb belátásra térítési kísérletem ellenére úgy ragaszkodott.
IDE (oda)
Ha valaki ragaszkodik az IDE-hez, annak komoly oka van. A tanulónál is (pl. nem jól jegyez meg fv-neveket, kattintani jobban szeret, mint gépelni, stb). Ha a konzolt akarod ráerőltetni, min. ugyanolyan küzdelmes lesz neki, nem biztos, hogy sikerrel jár(sz).
(Én pl. adott feladatra egy bizonyos IDE-hez ragaszkodom, még verziót is csak akkor váltok, ha nagyon muszáj. Persze megnézek másokat is, de magával a beletanulással nem töltök sok időt. Épp csak ellenőrzöm néha, hogy lehet-e nekem jobb, mint amit használok.)
Mondom mindezt úgy, hogy nem vagyok tanár.
Szerk.: Kiindultunk onnan, hogy a PHP-t akarta magyarra fordítani... Ne ijesszük már el ennyire, lehet nem is tudja, miről vitázunk, a végén még nem megy érettségizni.
A legtöbb IDE - amit idáig
Én windows-on nőttem fel, és a fiatalok többsége is. Aki használt már DOS-t, az tudja, hogy kényelmetlen, emiatt a windows felhasználók között egyáltalán nem terjedt el a parancssor használata, helyette inkább GUI-ban, meg kattintásokban gondolkodunk. Azt elismerem, hogy a unix parancssor használata kényelmesebb, de szerintem egy jól megcsinált grafikus felülettel nem ér fel.
Az IDE-vel én sosem küzdöttem, rengeteg kényelmi funkció van benne, ami egy notepad-ben nincsen, a notepad++, stb... felpluginezés meg szerintem időpazarlás, amikor megkapom ugyanazt, vagy jobbat egyben, és sokszor jobb minőségben. Az IDE-t meg kell tanulni használni. Amíg fogalma sincs valakinek, hogy mit jelent pl az, hogy refactor, vagy code reformat, stb... Addig persze nincs értelme, és csak zavaró. Én pl nem használok valami sok extra feature-t rendszeresen: run unit test, code coverage, code reformat, refactor típusok, go to declaration, find all occurence, replace all occurence, git parancsok, ennyi. Kb 20-30 alapvető dolgot kell megtanulni, hogy hatékonyan lehessen használni egy IDE-t, onnantól viszont, hogy tudja használni, senki nem akar notepad-re visszatérni, mert lassú és kényelmetlen...
+1
Kérdés, hogy tanítanak-e neki
Igen nagy hülyeség úgy nekivágni az érettséginek egy tárgyból, hogy nem jársz belőle fakultációra.
Milyen a tipikus régi módszer?
Üdvözlöm Bob autóalkatrész
?
PHP
http://www.perfactkiado.hu/phpesmysql.php
(ezt dobta fel elsőnek a google)
Elindulni jó, de összességében én nem voltam teljesen elégedett vele. Főleg azért, mert nem igazán (nem eléggé?) OOP központú.
Régen jó volt a könyv. Nekem
Én tavaly v. tavalyelőtt
Vannak nagyon jó könyvek, de
és tényleg nem eléggé OOPÉs
Az van, hogy mostanában
ui: a linked több mint tíz éves.
Több mint ezer éves
Mondok egy példát: én az angol érettségin, az angol és német nyelvvizsgák szóbelijének beszélgetős részén mindhárom alkalommal ugyanarról a témáról beszéltem, pedig más-mást húztam. Azért tettem így, mert ahhoz volt kedvem.
Ezek a cégek azt várják el, hogy kalapáccsal oldj meg minden feladatot. Persze, ismerni kell a kalapács használatát, de ha te tudsz hatékonyabb eszközről, akkor úgy kell alakítani a dolgokat, hogy azt használhasd minél hamarabb.
Valamit félreértelmezel. Hogy
A másik meg: az én szempontomból mindegy, hogy csak divat vagy valóban haszna van, ha egyszer elvárják és interjún esetleg bele is kérdeznek.
feltéve, hogy olyan
Az erős statikus típusosság
Én a HTML kimenetet programozottan állítom elő: Az XML
NodeList
,Element
ésText
osztályok mind aNode
interfészt valósítják meg; azElement
örökli a viselkedését aNodeList
-től; ők mind, és a HTTP válasz megvalósítják aSerializable
interfészt. ALayout
osztályom örökölElement
-től, az egyes oldalakhoz tartozó sablonok örökölnek aLayout
-tól.Gábor, neked nem az OOP-vel van bajod, ami 50 éve létező programozási paradigmák egy összefoglaló neve; hanem az adattípusokkal. Ez viszont elég nagy baj.
Azért tegyük hozzá
Szerintem Gábornak épp az öröklődéssel, származtatással, stb. van "gondja", ami - valljuk be - valamennyivel mindig lassabb futásidőt eredményez, mint egy fv-gyűjtemény, de ez a legtöbb esetben nem észrevehető különbség. PHP-ban nem tudom (mert szkript nyelv), de egyes nyelvekben a memóriahasználat sokkal nagyobb az objektumok helyes használata nélkül, mert sok statikus változóra / függvényre van szükséged, az osztályt meg - ha nincs szükséged már rá - simán kidobod, és csak az eredményt tartod meg.
Ezzel kapcsolatban: a PHP fordítója a feldolgozás / futtatás során felszabadítja azoknak a változóknak a területét, amelyik
null
értéket kap? Ha igen, akkor kb ugyanaz a helyzet: ezért is érdemes valamennyire OOP.Szerintem Gábornak épp az
Én csak a szokásos dumával tudok jönni, hogy először kódolni kell, utána optimalizálni. :-) Azt mondják, hogy nem ez szokott lenni a szűk keresztmetszet, hanem a hálózati kapcsolat, fájlrendszer, adatbázis, stb... (Még sosem próbáltam ki, hogy igazuk van e.)
Dolgoztam már sok
Pedig kényelmesebb is
Sokkal átláthatóbb kód, még akkor is, ha öröklődéssel, stb. "nem bonyolítod".
Gábor, rosszul tudom, hogy te Delphiben is kódoltál? Onnét olyan OOP-rálátásodnak kéne lenni, hogy ihaj. Kivéve, ha csak console-appot írtál. De ott is ajánlott, kényelmi szempontból.
Használtam Delphit, pontosan
Miért?
Olvass el egy jó design
Tudsz ajánlani olyan
Azaz:
- mitől lesz hordozhatóbb egy OOP kód, mint egy procedurális?
- milyen előnyökkel jár az adatok elrejtése?
- ki elől és miért akarnék én bármit is elrejteni?
- mitől lesz könnyebb refaktorálni az OOP kódot?
- miért érint jóval kisebb kódmennyiséget a refaktorálás OOP kódnál?
- mitől lesz az OOP kód áttekinthetőbb?
Úgy lehetne viszonylag könnyen ezekre a kérdésekre választ kapni, ha definiálnánk egy feladatot, lefejlesztenénk OOP és procedurális megközelítéssel, és összehasonlítanánk a két megoldást.
Bár a kérdés nem nekem szólt,
Meglepő, de az adatokat a programozó leginkább saját maga elől rejti el. Méghozzá jó indokkal:
Amikor objektumokkal dolgozunk, akkor egy olyan absztrakciós réteget készítünk, ami eltakarja a konkrét implementációt (ezáltal függetlenedünk tőle, azaz a kód újrafelhasználható lesz).
Tegyük fel, hogy van egy lista adatszerkezetünk, amit egy egyszerű tömbként valósítunk meg. Elrejtjük ezt a belső reprezentációt, csak egy iterátoron keresztül lehet a tartalmához hozzáférni.
Idő közben rájöttünk, hogy a tömb nem megfelelő, láncolt listára van szükségünk. Mit teszünk? Átírjuk magát az implementációt, illetve az iterátor (implementációját), és készen vagyunk, az alkalmazás többi része észre sem veszi, hogy változott valami.
Mi történt volna, ha a tömbhöz közvetlenül hozzáférünk? Át kell nézni az egész alkalmazás kódját, és ahol ezt a listát használjuk, ott módosítani kell a hozzáférésen. Ez nagyságrendekkel nehezebb (több kód, több hibalehetőség, duplikáció, stb).
Tehát ezért előnyös az információk (az implementáció) elrejtése, ezért lesz könnyebb refaktorálni a kódot (ezért érint kevesebb kódmennyiséget a refaktorálás).
Az áttekinthetőség pedig azért jobb, mert OO környezetben az adat, és a rajta végezhető művelet együtt van (kódszervezés szempontjából is), maga a való élet is egy OO környezet, az absztrakciók pedig kitisztítják a problémát, elrejtik a probléma szempontjából irreleváns dolgokat.
Az OOP nem a szent grál, amint a példa is mutatja.
mitől lesz hordozhatóbb egy
Attól, hogy jól definiált interfészeket használsz. (Vö.: Mitől lesz hordozhatóbb a procedurális kód, mint strukturálatlan?)
Az implementáció az interfésztől függetlenül változhat. (Vö.: Milyen előnyökkel jár a függvénytörzs elrejtése?)
Mert azzal, hogy bizonyos dolgokat elrejtesz, és csak egy interfészt teszel nyilvánossá, azzal biztosítod azt, hogy egyrészt a kódod felhasználói ne támaszkodjanak olyan implementációs részletekre, amik bármikor változhatnak, másrészt pedig azt, hogy egy adatstruktúrád belső állapota konzisztens maradjon.
Mert jól definiált interfészeket használsz. (Vö.: Mitől lesz könnyebb refaktorálni a procedurális kódot, mint a strukturálatlant?)
Mert jól definiált interfészeket használsz. (Vö.: Miért érint jóval kisebb kódmennyiséget a refaktorálás procedurális kódnál, mint strukturálatlannál?)
Mert jól definiált interfészeket használsz. (Vö.: Mitől lesz a procedurális kód áttekinthetőbb, mint a strukturálatlan?)
Remélem sikerült megvilágítani a gondot a kérdéseiddel. Az objektumorientáltság egy összefoglaló név különböző programozási gyakorlatokra, amiknek a nagy részét te is használod. Természetesen az interfészeken túl a polimorfizmus is segít a kód modulárisabbá tételében, a származtatás pedig segít benne, hogy kevesebb felesleges kódot írj. És persze az egész alkalmazás-specifikus típusok létrehozásán alapul. Ezek közül kizárólag a dinamikus polimorfizmus az, ami az objektumorientáltság újdonsága – ha lehet ezt mondani egy 1967-ben, tehát 56 éve (!) bevezetett eszközre. Az, hogy a legtöbb nyelv ehhez egy speciális szintakszist rendel, illetve például a PHP-ban ezen szintakszis bevezetése előtt nem is volt lehetőséged például absztrakt adattípusokat létrehozni, már egy más kérdés. C-ben is simán lehet objektumorientáltan programozni, csak nem túl kényelmes.
Az a baj, hogy belekapaszkodsz szavakba („OOP”, „statikus”), amik ellenszenvesek, és nem gondolsz utána, mit takarnak, mert akkor te is rájönnél, hogy ezek jó dolgok, amiket magad is használsz.
»mitől lesz hordozhatóbb egy
Attól, hogy jól definiált interfészeket használsz. (Vö.: Mitől lesz hordozhatóbb a procedurális kód, mint strukturálatlan?)
1, procedurális programozásban is definiálsz interfészeket (vö.
function függvény(paraméter1, paraméter2)
ésobjektum.obj_metódus(paraméter1, paraméter2)
)2, az OOP és a procedurális programozás is strukturált
Mert azzal, hogy bizonyos dolgokat elrejtesz, és csak egy interfészt teszel nyilvánossá, azzal biztosítod azt, hogy egyrészt a kódod felhasználói ne támaszkodjanak olyan implementációs részletekre, amik bármikor változhatnak
Mert jól definiált interfészeket használsz.
procedurális programozásban
Akkor még mindig nem érted, mit próbálok mondani. Épp arról beszélek, hogy részben te is OOP-t használsz, mert az OOP egyik alappilére az iterfészek definiálása, amik a gyakorlatban függvényeket jelentenek.
Az már az ő bajuk. Te dokumentáltad a forráskódban a hozzáférési szabállyal, hogy mi az, amire támaszkodhatnak és mi az, amire nem. Ha ők módosítják a kódod, és ezért a sajátjuk nem fog működni, amikor te kiadod a következő verziót, vagy simán csak rosszul fog működni a kódod, mert nem az interfészen keresztül használják, akkor magukra vessenek. Az adatrejtés csupán a nyilvános interfészt, és a nem nyilvánosnak szánt implementációt dokumentálja, és a fordító által ki is kényszeríti, hogy véletlen ne szeghesd meg a megállapodást. Pont mint a statikus típusrendszer teszi a kifejezések által felvehető értékekkel.
Nehezen hiszem, hogy ezekben ne használnál feltételvizsgálatot és ciklusokat.
Tehát csak bájtsorozatokat használsz? Mert ha már legalább kétféle adattípust használsz, mondjuk számokat is, akkor nem igaz, amit írsz, épp csak a kész adattípusokat használod, de használod őket.
A kimenő HTML-t sem érdemes sztringként kezelni, mert így elkerülhető, hogy rosszul formázott legyen. Az adminfelületen, ha használsz valamilyen markupot, akkor azt sem célszerű sztringfüggvényekkel ellenőrizgetni, helyette felparzolod egy saját típusba, és egy struktúrát ellenőrzöl.
Egy végtelenül egyszerű megoldás működhet egy végtelenül egyszerű alkalmazásnál. De egész biztos, hogy a website-ok túlnyomó többségére ez már nem húzható rá. Én azt sem értem, hogy miért gondolod úgy, hogy egy webalkalmazás bármivel is kevésbé komplex mint bármilyen más szoftver. Attól, hogy egy kérés-válasz alapú protokollon keresztül, szerializált formátumban kommunikálsz vele, ugyanúgy működik, mint egy asztali alkalmazás.
Úgy gondolom, hogy értem,
szerintem jobb a procedurális
Erre tudsz hozni egy példát?
Ezt nem értem, a strukturált programozás éppen ezeknek a használatáról szól, mitől lesz a kódod csak félig strukturált?
Meg asszociatív tömböket, meg erőforrásokat, meg nullt. Ezekben semmi speciális nincs, ezek adattípusok. Épp csak a PHP fejlesztői ezeket implementálták a nyelv részeként. Nem értem, hogy ha szükségét érzed, hogy ne csak sztringet használj, hanem dedikált típusokat, akkor miért csak a beépítetteket érzed hasznosnak.
A szoftver legalább olyan komplex, amilyen komplexek a követelményei.
Senki sem vonja kétségbe, hogy lehetséges, csak azt, hogy ez a leghatékonyabb módja. De én még csak nem is erről beszélek, én továbbra is azt akarom elhitetni veled, hogy az OOP és a procedurális programozás nem két egymással ellentétes paradigma, hanem előbbi az utóbbi egy bizonyos felhasználási mintája.
Az oop a struktúrális
»szerintem jobb a
Erre tudsz hozni egy példát?
Emiatt, valamint amiatt, hogy nehézkes volt a hibajavítása és a bővítése, átírtam az egészet. Kidobtam az öröklődést meg minden egyéb OOP sallangot, és lett belőle egy nettó kétszázötven soros kód saját eseménykezeléssel meg mindennel, és az ablakunk egy szemvillanásnyi idő alatt jelenik meg. Ha OOP szintakszissal dolgozol (öröklődés, polimorfizmus), mindent objektumként fogsz fel, azaz kalapács van a kezedben, és mindent szögnek látsz.
Másik példának mondjuk vegyünk egy számlát: két részből áll, egy fejlécből és tételsorokból. OOP megközelítésben így néz ki a definíciója:
}
class Számla() {
private $tetelsorok;
function __construct() {
$this->tetelsorok = new Tételsorok($this->sorszam);
}
}
Ahhoz, hogy a tételsorokhoz hozzáférj, a számlát példányosítani kell. De mi van akkor, ha neked csak bizonyos tételsorok adataira van szükséged a statisztikához, mondjuk azokra, amelyeknél a termék darabszáma nagyobb, mint tíz? Ha megszűnteted az erős kapcsolatot a számla és a tételsorok között, pont ugyanott vagy, mint procedurális, laza programozásnál, ahol csak végigiterálsz pár adattömbön, és kész, és az adatok közti összefüggést nem kezeled.
A JavaScript (vagy bármilyen
Ez mind a konkrét követelményektől függ, a fenti kódod pedig szinte semmit nem mond ezekről. De alapvetően semmi nem akadályoz meg benne, hogy csak tételsorokat hozzak létre, ha csak azoknak a funkcionalitására van szükségem. Osztályokat nem azért definiálsz, mert jó szórakozás, hanem mert új adattípust akarsz bevezetni hozzá tartozó műveletekkel. Az OOP nem overengineeringet jelent, még ha van is rá sok példa.
Azt tudod, hogy ugyanez egy szóban, fosztóképzővel megfogalmazva, már nem pozitív csengésű? :)
Biztos vagyok benne, hogy nem funkcionálisra gondoltál, mert a funkcionális programozás még erősebb megkötésekkel dolgozik, mint az objektumorientált. Ilyen megközelítéssel a legjobb volna assembly-ben dolgozni, mert ott semmilyen struktúrát nem kell vigyél a kódodba, teljes a szabadság. Véletlennek tartod, hogy nem így fejlesztünk? Minden egyes új paradigma elvesz a szabadságodból, mert az önfegyelem hosszú távon kifizetődőbb, mint a korlátlan szabadság. A strukturált kódban nem használsz
goto
-t, cserébe követhető a végrehajtás; az objektumorientált programozásban nem nyúlkálsz az adatszerkezetek belsejében, cserébe könnyebb módosítani a kódot; ha funkcionálisan programozol, a kódod nem használ változókat és nem ír/olvas, cserébe jól párhuzamosítható. Ha nem dohányzol, akkor megfosztod magad a nikotintól, cserébe nem nem vágják ki negyven évesen a gégéd.Persze a fentiek közül egyik sem vallás: néha a
goto
olvashatóbbá teszi a kódot; nem kell minden adatot interfész mögött tárolni; sokszor a változó adattárolás hatékonyabb; néha jól esik egy szivar.Jelenleg a 4-es verzió van
Sokkal jobban szeretek sok kicsi projektet együtt használni, pl underscore, jquery, backbone, bacbone-ui, stb... Mindegyik valamilyen kisebb probléma megoldására specializálódott, nem egy gigantikus valami, mint az extjs... Így nagyobb eséllyel kapok minőségi kódot, csak több idő a könyvtárak összeválogatása, meg valamit nekem kell megírni, ha nem vagyok elégedett egyik kész rendszerrel sem. Most éppen azon dolgozom, hogy rest service-ből érkező adatok alapján automatikusan generáljon a kliensem admin oldalakat, és ne nekem kelljen kézzel megcsinálnom őket...
procedurális programozásban
Ez nem interface, hanem szignatúra. OOP-ben az interface nem ezt jelenti, egész pontosan OOP-ben több metódus szignatúráját írhatod le interface-szel (meg pl static fieldeket, inner classt). Ebben az a nagy különbség a függvényhez képest, hogy ugyanazt az interface-t többen is implementálhatják, vagyis az adott interface mögött lévő objektumok teljesen máshogy is viselkedhetnek, de a hívó kódot ez egyáltalán nem érdekli. Függvénynél ezt nem tudod megvalósítani. 1 függvény egyféleképp működik, ha más működést akarsz, új függvényt kell írnod.
Ez nem feltétlenül igaz. Javaban pl kiadsz egy jart, abban már a felhasználónak macerás átírni publicra. Legalábbis a szokásos programozási eszközökkel...
Ez nem interface, hanem
Ez egy technikai kérdés, irreleváns. Az pedig, hogy függvény esetén nem megvalósítható, simán csak nem igaz, legalábbis a civilizáltabb nyelvekre. Még C-ben is használhatsz függvénymutatót, pláne funkcionális nyelvekben.
Egyáltalán nem irreleváns,
A függvénymutatót meg hagyjuk, de tényleg :) Assemblyben is tudsz bárhova jumpolni, mégse vetjük össze egy objektumon végzett metódushívással. Ezt már korábban is felhoztad, és akkor is egyetértettünk benne, hogy azért igen jelentős a különbség a két megoldás között :) Mégha a gyakorlatban ugyanarra is fordul le.
Egy függvénymutató valóban
A szignatúrát se kódolja.
A szignatúrát se
Dehogynem. A függvénymutató típusának része a visszatérési érték típusa és az argumentumok száma és típusa.
Vagyis nem kódolja, hanem
Ezt nem értem. Ha más
Pedig de, és ezzel vissza is
Ez nem érv, ha voidot
Te magad is
$valami->ertek
-nek, mert ez csak a pl. MyClass osztály,$valami
példányában okoz(hat) gondot, de nem borul az egész kódod, mint ha$ertek
(globális) változót használsz.Ugyanez igaz a függvényeidre, ha globálisak, akkor feleslegesen és veszélyesen onnan is elérhetőek, ahonnan nem kéne. Igen, magad elől jó elrejteni, ott, ahol szükségtelen / káros a használata.
És mint fentebb írtam: egy-egy feladatra, összetett adatra írsz egy osztályt, azon belül tetszőleges számú metódust és tulajdonságot: ezt egy egységként tudod kezelni, míg procedurális esetben az össze fv-ed kvázi egy osztály részei.
Nekem pl. adatbáziskezelésben egyik kedvent fv-nevem a
get_item($id)
, procedurális programozásban ezt hogy oldod meg, hogy pl. fórumtémát is kiválaszthass ugyanígy, és blogot is? Nem használhatod u.azt a nevet, pedig leginkább - a tartalomkezelésnél, mint alapvető feladatnál maradva - arra van szükséged átláthatóság és kényelmi szempontból, hogy egy-egy osztályod definiáljon egy-egy tartalomtípust, és ezeknek vannak "közös" fv-eik, mivel mind tartalomtípusok. De amiért más-más tartalomtípusok, ezen fv-ek is kicsit másként működnek.De nem sokkal átláthatóbb, hogy
$forum->get_item(5)
és$comments->get_item(85)
, mintget_forum_item(5)
, stb.?És így egy tartalomtípus egy osztályban definiálva lehetővé teszi, hogy amikor pl. hozzászólást szerkesztesz, véletlenül se bántsd (elgépelés miatt) a fórumtémát.
Arról nem is beszélve, hogy pl. a fórumtémádnak van két fő jellemzője (a kiegészítőkön túl): cím és tartalom, egy következő projektedben ez tök jó, de kell még egy felh. név is -> nem írod az elejéről újra, hanem örökítesz egy (fantázia nélkül) Forum2 class-t a korábbi Forum-ból, kiegészíted a megfelelő tulajdonsággal, és a kezelőfv-eit át / felülírod, szükség szerint. Sokkal kevesebb munka, mint újat a 0-ról írni (ezt írták mások is: refaktorálni sokkal könnyebb - persze ha jól használod ki az OO lehetőségeit).
Hogy egy kicsit csaljalak MVC irányba, a fenti
$forum->get_item(5)
így szép (egy kontroller fv-ében "vagyunk", ami megkapta a HTTP kérést):mitől lesz hordozhatóbb egy
Pl a több szintű absztrakciótól. Tudsz saját interface implementációval módosítani egy külső api viselkedésén, magának az apinak a változtatása nélkül. Amit procedurális kódban nem tudsz megtenni.
Hogy kívülről nem tudod egy objektum állapotát módosítani, csak a készítője által kiajánlott metódusain keresztül.
Mindenki elől, aki nem a fejlesztője az adott osztálynak. Tehát mindenki elől, beleértve magadat is :)
miért érint jóval kisebb kódmennyiséget a refaktorálás OOP kódnál?
Ezt MadBence tökjól összeszedte, úgyhogy én nem írom le újból.
A több absztrakciótól. A jó OOP kód szinte mondatszerűen, sallangmentesen olvasható. Ez természetesen részben igaz lehet a procedurális kódra is, a különbség az, hogy az OOP ezt nyelvi elemekkel támogatja, procedurálisban pedig teljesen a programozóra van bízva. Ennek eredménye szokott lenni a hosszú spagettikód a kismillió függvényhívással. A szépen szervezett OOP kód nem ilyen. De természetesen láttam már hasonlót OOP nyelven megvalósítva :) Csak úgy érdekességképp: év elején volt egy interjúm, ahol az alábbi kérdést kaptam az interjúztatómtól: "Milyen hosszú egy metódus?" El lehet gondolkodni az okán :) A válasz természetesen az, hogy rövid.
Ezt úgy írod, mintha bárkiben is felmerülne ez kérdésként rajtad kívül :)
Pl a több szintű
Ajánlom figyelmedbe a szivárgó absztrakciók törvényét.
Mindenki elől, aki nem a fejlesztője az adott osztálynak. Tehát mindenki elől, beleértve magadat is :)
Én magam elől nem szeretnék elrejteni semmit. De ez akkor maradjon az én bajom.
Ajánlom figyelmedbe a
És ebből azt a következtetést vontad le, hogy az absztrakció rossz dolog? A törvény arról szól, hogy az absztrakció lényege nem az, hogy ne kelljen ismerd a megvalósítást, csak hogy az esetek többségében ne kelljen vele foglalkozz.
Akkor kivezeted az interfészre.
Igen, minél több az
Az absztrakt szó jelentése: Elvont, elméleti, gondolati. A valóság összefüggéseivel nem törődő, a szokásos formákat megbontó.
Azért ez elég súlyos.
Akkor ezt az egész
Nagyon jó példa. Azért vannak gombok a gépen, hogy ne kábelek összeérintésével kezeld, mert egyrészt kényelmetlen derékig bebújni a dobozba, másrészt nincs elég kezed mindet tartani, harmadrészt bármikor kihagyhatsz egy lépést, és akkor leég az egész.
Ha kell egy új funkció, akkor tegyél ki egy gombot. Ha időközben rájössz, hogy máshogy akarod megvalósítani, a gomb marad, csak átdrótozod.
+10
Igen, minél több az
Az információ maga absztrakt, a valóságban nem létezik ilyesmi. Innentől kezdve miről beszélünk?
Én már elvesztettem a fonalat
Szerintem meg lehet tenni,
Nem, ilyet sosem akarsz csinálni. Pont ez a lényege. A főnököd se fog ilyet kérni, mert vagy technikai ember és tudja, hogy ilyet nem csinálunk, vagy nem technikai ember, és akkor erről nem is dönt.
Ezzel a válasszal tuti hazaküldenének :)
Góg és Demagóg fia vagyok én... :) Az a baj, hogy te egy széles körben elfogadott, és egy komplett szakma által gyakorlati tapasztalattal alátámasztott tényt próbálsz meg állandóan vitatni azzal, hogy lehet szarul is csinálni. Persze. De ez már a kockázatkezelés témaköre inkább, ez pedig a project management/lead feladata, nem a technológiáé. Erre vannak a reviewk pl.
int add(int a, int b) {Â
return a * b;
}
De, a feladatmeghatározásom
Na ilyen az a kód, amivel én nem akarok találkozni munkám során :) Ha egy recordset felolvasását, feldolgozását, és kiíratását végzi egy metódus (amit ugye nem csinál, de tegyük fel, hogy igen), akkor abban a metódusban 3 metódushívást akarok látni: fetch, process, write. Hogy ezek belül mit csinálnak, nem érdekel, mert nem azon az absztrakciós szinten vagyok, ahol ezzel akarok foglalkozni. Ha 500 sor, ciklusok, változókkal mókolások stb... Az áttekinthetetlen, és olvashatatlan. Ami nem fér ki kb egy képernyőre, az már egy jelzés, hogy ki kéne emelni dolgokat külön metódusba. Ez persze nem egy beégetett szabály, de általában jól jelzi, hogy túl sokminden került a metódusba.
És hogy nem elméletnek programozol... Az elméletedről szól az egész vita szemben a többiek gyakorlati alkalmazási tapasztalatával :)
Ismerjük szerintem mind a procedurális programozást, azzal kezdtünk. Majd azt választottuk, hogy OOP-ben programozunk, mert a gyakorlati tapasztalatunk szerint ez kifizetődőbb. Nekem továbbra is az az érzésem, hogy nem érted miről szól az egész, és mumusnak tekinted. Ami a te bajod, csak ha sok helyen leírod, hogy az OOP szar és túlbonyolítás, ráadásul mindezt elég nagy hangerővel és meggyőződéssel, akkor könnyen lehet, hogy lesznek, akik elhiszik. Főleg, mivel elsőre sokan nehézkesnek találják. És mondjuk egy Pascalról Javara váltás (ami egy tipikus lépés az oktatásban) valóban nem zökkenőmentes. Bevallom, elsőre én is baromságnak és túlbonyolításnak éreztem az egészet. Főleg assembly után tűnt istenkáromlásnak. De miután tudtam hová tenni, és lett belőle valódi gyakorlati tapasztalatom, már egész mást gondolok róla. Azt ajánlom, hogy olvass el pár könyvet a témában. Valami jó OOP alapozó, aztán Design patterns, végül Clean code. Ha a végére sem változik meg a véleményed, akkor ez van :)
Pontosabban? :)
Ami azért kicsit megfontolandó, és ha már említetted ezeket a programnyelveket:
- Tegyük fel, hogy Assemblyben, Pascalban és Javaban egyformán jó programozó vagy.
- Akkor ugyanaz a (pl. számítási) feladat futásideje Assemblyben lesz a legkisebb, Javaban a legnagyobb. Ugyanez memóriafelhasználásban is.
- Ugyanakkor a fejlesztési időd pont fordítottan arányos, de lássuk be:
- Struktúrált program (a lefordított végeredmény) általában kisebb és gyorsabb, mint OOP.
- Viszont nagy kérdés, hogy megéri-e az időráfordítást, és a kb. változtathatatlanságot? (Ez mondjuk túlzás, mert Assemblyben is lehet szép kódot írni, de akkor is nehezebb átírni.)
Ha Pascal alatt ObjectPascalt (vagy azt is) tanítanának, nem lenne akkora szakadék. Nálunk elkövették azt a hibát (2004-től), hogy Assembly, Java, Delphi a sorrend. Pedig (főként "sima" Pascal után) az ObjectPascalt könnyen érthetőnek találom, inkább, mint Java-t.
Persze Assembly a "kapu", voltak páran, akik 3. éve járták...
De a Java oktatómmal (tök jó fej volt, kb. egyidős) Java-gyakorlat keretében számtalanszor versenyeztünk: ki csinálja meg hamarabb az adott játékfeladatot, ő Java-n, vagy én Delphiben... :) Így nem volt annyira idegen és amellett érdekes is, mindenki számára (én meg csak kb. otthon nyűglődtem a Java-val :( ).
Viszont nagy kérdés, hogy
Ennek nem sok köze van az oo vs struktúrált vitához. A java azért lassabb, mert virtuális gépen fut, egyébként az oo kódra azt mondják, hogy nagyságrendileg ugyanolyan gyors, mint a nem oo. Ha ettől eltekintünk, akkor a programozó néhány órás munkája kerül kb annyiba, mint a plusz vas egy évig, szóval egyáltalán nem éri meg emiatt assembly-t választani (szerintem) ... Az erőforrás igényesség inkább tömegtermékeknél szempont az olcsóság, kisebb méret, fogyasztás stb.. miatt, de pl mobiloknál is vannak már annyira erősek és takarékosak az arm processzorok, hogy ott is jobban megéri java-ban programozni, illetve egy másik témában is előkerült, hogy vannak már a mobilokhoz hasonló méretben single board computer-ek, amiket szintén lehet használni célfeladatra. Ezzel kapcsolatban most pont is van egy csomó ötletem, építeni fogok 4 rotoros robot helikoptert, quadro micsodát, meg öntöző rendszert, meg még ki tudja mit :D
De, a feladatmeghatározásom
Szerintem egyezzünk meg
Nem akarlak meggyőzni, és ez a vita aztán tényleg messzire vezetne. Adtam könyvcímet a témában, ha érdekel, majd utánaolvasol.
Egyáltalán nem erre gondoltam. Csak azt írod, hogy nem akarsz elméletnek kódolni, és közben pont hogy megkötöd magad ezzel az elmélettel, hogy kizárod az OOP-t a palettáról, noha egy baromi hasznos eszköz.
Távol álljon tőlem, hogy ilyet gondoljak rólad. Viszont annyira sikerült megismerjelek, amikor együtt dolgoztunk, hogy szeretsz a nagy tömeggel ellentétes irányba haladni. Attól függetlenül, hogy a tömeg jó, vagy rossz irányba halad. A kritikus szemlélet valóban hasznos, de azon azért érdemes elgondolkodni, hogy a szakmánk eléggé gyakorlat vezérelt, és többnyire ebből alakulnak ki a mögöttes elméletek, nem pedig fordítva.
szeretsz a nagy tömeggel
Nem értem
A felhozott példáid (dinamikus HTML-CSS) szerintem rosszak. Azok jók statikusnak, ott a DOM, amin variálhatsz.
(Lehet lesz egy ehhez kapcsolódó kérdésem, de még érik és más téma.)
Igazad van, nem tetszik az
A DOM-on csak scripttel
Hát szűrni kell XSS-re, a gyorstárazást meg meg lehet oldani localStore-al, ha nagyon fontos.
Majdnem
Másrészt: légyszíves válogasd meg az általad készített oldalon, hogy csak a saját scriptedet használod. Azt hiszem ebben nagyon is egyetértünk. Ezzel ez a fajta XSS kilőve.
Harmadszor: ha betartasz néhány spórolós aranyszabályt (ami sajnos megintcsak nagyonnem divat manapság), akkor simán megcsinálod backend az egész oldalt, és nem foglalkozol vele, hogy a fejléc pl. mindegyiken ugyanaz (egyébként ha pl háttérkép, akkor tudod, hogy külön cacheli). Ha üres / kikapcsolt cache mellett a teljes oldal kevesebb, mint 3-400 kB, akkor kár is foglalkozni a darabonkénti töltéssel. Emellett persze a HTTP kérések száma is, stb. Máris kidobhatod egyben a js-t is, legfeljebb csili-vili, + kliensoldali ellenőrzés, stb-re.
De ezeket te mind tudod, ezért nem értem ezt a részt.
Már hogy ne lenne rá
Na ezért nincs értelme
Én csak a php-re szorítkoztam
Tudtommal már a PHP-ban is
Azt hiszem az 5-ös verziótól.
5.3-tól. Az autoload-hoz
Van olyan nyelv, ahol az
Lua, például.
A központi koncepció az
do_stuff(foo, bar, baz)
, azzal hozzákötötted ado_stuff()
függvényt felhasználó kódot ado_stuff()
konkrét implementációjához. Ha PHP-ben azt mondod, hogy$obj->doStuff($foo, $bar, $baz)
, akkor a specifikációhoz hozzá van kötve a kód (feltéve, hogy$obj
osztálya vagy interfésze ismert), de az implementációhoz nem.Hasonló különbség van a
reduce(int** array, int default, int (*funcptr)(int, int))
és areduce(Iterable iter, Callback cb)
között is, csak ott meg az argumentumként várt adatstruktúra implementációjához köti vagy nem köti magát a függvény.Ha C-ben azt mondod, hogy
Magamat ismétlem, de ha mutatón keresztül hívod a függvényt, akkor máris elválasztottad a kettőt.
Ha mutatón keresztül hívod a
Igen, ez tényleg egy gyengébb
Meg a unit tesztek. De
Unit teszteket is ugyanúgy
Ha használ. De ha a
Adattípusok
Neked is COBOL-t kellett
Érdekelne
Sosem hallottam róla, érdekelne, mint indok.
A cobol baromi régi nyelv,
Szerinted miben írták a
Tehát a világ pénzügyi
„If it ain’t broke, don’t fix
Vágom, de biztonsági
Nem véletlenül írtam
Okés! :-)
Kiokosított Assembly
Akkor te valami mást láttál.
A COBOL (ANSI) egy hihetetlenül szószátyár, adatkezelésre kitalált nyelv (COmmon Businness Oriented Language).
Hello World
Adatbázis kezelést meg ahány nyelvjárás annyiféleképp oldották meg benne, mert szabványosan csak az index-szekvenciális fájlok kezelésére volt felkészítve.
Viszont, ami a fenti példán nem igazán látszik, az adatstruktúrák leírása elég jól olvasható volt benne.
Hát...
Köszi a Hello World-öt, azon látszik, hogy szeret proc-okba csoportosítani (assembly), ami előny is és hátrány is (stack) lehet.
Nekem valószínűleg tetszett volna, ha dolgom akad vele. Persze könyv stb. után, ezt csak úgy első ránézésekre mondom.
Épp ez az, hogy egyáltalán
(FORTRAN, PL/I, Algol, Pascal - ezek nem igazán gépközeli nyelvek. A C az egyetlen kivétel)
Hát akkor nem nyert
Az már rég volt. :( Már
Már amikor én dolgoztam rajta, akkor sem COBOL-t használtunk, pedig annak már több, mint húsz éve.
Mástól egy-két éve hallottam,
Leginkább Java, vagy az
És miért használsz különböző
Belegondoltál már, hogy mennyit vesztesz teljesítményben azzal, hogy tömböket (olcsó indexelés, olcsó bejárás), listákat (olcsó módosítás), hash táblákat (optimális egyensúly méret és indexelési sebesség közt) és adatstruktúrákat (olcsó mezőelérés) ugyanazzal a generikus megvalósítással reprezentálsz? Figyelem, akasztják a hóhért: és milyen hatása van ennek a környezetre? :)
Azt, hogy az asszociatív tömbök használatát sem a fordító (statikus típusrendszerben), sem a futtatókörnyezet (dinamikus típusrendszerben) nem tudja ellenőrizni, már nem is említem.
Erős statikus típusosság
Szedjük darabokra, célszerű hátulról:
1, típusosság: tudom egy értékről, hogy karakterlánc, szám stb.
2, statikus: nem változó, fix
3, erős típusosság: pontosan tudom, hogy milyen típusú az érték, azaz hány bájtos egész szám/lebegőpontos
Egy szoftver sosem statikus, akár napról napra változhatnak a megrendelő igényei, mert ő sem tudja pontosan elsőre (másodszorra) lemodellezni azt, amire szüksége van. Ha erősen statikus valami, akkor emiatt mindenképp hátrányba kerülök.
Ha mindezt beteszem egy objektumorientált környezetbe, ahol többszörös öröklődés is van, és mondjuk az alap osztályt vagy köztes arcot kell módosítani, ráadásul az OOP jellegéből adódóan a programkódba hardkódolva van az adattípusok "viselkedése", azzal rengeteg plusz munkát csinálok magamnak.
Akárhonnan nézem, ezt egy nagyon merev szerkezetnek látom, ami idővel, a szoftver szükségszerű hízásával egyre nagyobb problémákat fog okozni.
Statikus típusosság: ha van
Erős típusosság: nincs varázslás a típusok között (ez nem feltétlenül azt jelenti, hogy nincs implicit típuskonverzió), hanem azt, hogy a konverziókra bizonyos megkötések vannak. Sajnos nincs általánosan elfogadott definíció.
Példák:
Dinamikus, gyenge: JS (és pl PHP)
Dinamikus, erős: Python
Statikus, gyenge: C
Statikus, erős: Java
MadBence, +:
Akkor dinamikus egy szoftver, ha képes saját magát változtatni - ez szerintem kerülendő útirány, vagy legalábbis programozás-elméleti szakemberek témaköre, nekünk, egyszerű gyakorlati fejlesztőknek erősen kockázatos vállalkozás bármilyen nyelven-környezetben.
És pont a szoftver "hízásakor" jutsz nagy előnyökhöz - feltéve, hogy elejétől fogva volt olyan jó a koncepciód, hogy a szükséges bővítés beleillik az előzőleg kialakított függőségekbe. (Itt van megint: "előre optimalizálunk".)
Összességében nézve hatalmas előnyökhöz jutsz, ha ügyes vagy. Pl. ha "függvénytárazol", akkor - mivel globálisak a fv-eid - "hízáskor" már nézheted is vissza az összes eddigi fv-edet, nehogy felülírj egy olyat, amit máshol meg ugyanúgy akarnál használni. Ugyanez igaz a változókra is. (Míg osztályokban akár mindegyiknek lehet ugyanolyan fv-e, de mégis kicsit mást csinál.) De ez csak a legegyszerűbb ok az OOP mellett, számos más előny is van (pl. loader_class írása / megléte), ami lényegesen megkönnyíti magát a programozást, és könnyen tudsz olyan okos struktúrát felépíteni, amivel még memóriát is spórolsz. Ugyanezt össze-vissza
require_once()
mindig, nagyon munkaigényes.- "helyettet" részben ellenőrzik a bevitt adatokat (nem kell pl.
is_int()
, de persze a kivételt "illik" kezelni;- kapásból "passzol" a változód az adatbázisod megfelelő mezőjével;
- nem vesztesz egy csomó időt a legkülönbözőbb helyeken az automatikus típuskonverziókkal.
Ha változtatsz rajta, az már
Mitől jó egy szoftver? Mitől
Javaslom, hogy nézz utána a TDD témakörének. Egy így fejlesztett szoftver jóval megbízhatóbb, mint egy, csak úgy a levegőbe írt kód, aminél az if egyik ágát sosem tesztelte senki, mert nem volt kedve a fejlesztőnek annyit kattintgatni. Plusz unit tesztekkel a későbbi módosítások sem okoznak törést a kódban. Akár struktúrált kódot is fejleszthetsz így.
Ott is ugyanúgy
Sokkal inkább készíthető könnyen továbbfejleszthető szoftver OOP szemlélettel, mint anélkül. Én teljesen autodidakta módon fogtam OOP-be (Delphi), vért izzadtam, mire elkezdtem az előnyeit felfogni. Addig bűn ronda kódot írtam, kilométeres függvényekkel, stb. Aztán elkezdtem szétválasztani a részfeladatokat, stb...
Ezzel együtt, amit fentebb írtál: olyan hosszú egy fv., amilyen kell, azzal részben egyet is értek. Nekem valahol ott a középút, hogy annyira azért nem "cleancode-olok", mint pl. inf3rno (pedig elméletben egyetértek vele), mert minden egyes interfész +1 stack-művelet is egyben, emiatt - erőforrás spórolása okán - van néha hosszabbacska fv-em is. De ezzel máris aláásom a továbbfejleszthetőséget, tehát nagyon csínyán kell bánni vele.
minden egyes interfész +1
Vagy nem, mert a fordító inline-olja.
Nyelvfüggő
Akármelyikre, az egyik
Gyerünk aludni
Az tévhit, hogy attól, hogy
Lehet
De olyan értelemben pontatlanul "idéztél", hogy nem a kevesebben van a hangsúly, hanem a mélységen. Tehát az örökíted az örökíted a,.... A másik, hogy ha fv1-ből hívod f2-őt, amiből fv3-at... és mikor mindenki a mélységi sorban visszatért, akkor fejeződik be fv1 az eredménnyel. Ez független a fájlkezeléstől, bár ha az rendszeres, akkor amellett elenyésző idő, de nem elenyésző RAM / CPU.
Ja, nyilván egy olyan kódnak,
Ha megnézel különféle
Én sem írtam az ellenkezőjét,
»Tapasztalatom szerint az
Így igaz. Jó tervezéssel - amihez megfelelő interjú és alany is kell - a munkád nagyobbik részét el is végezted.
Amit egy oo alkalmazásnál
Szerintem TDD-ben az API is
Mire gondolsz? Nálam az van,
API alatt most nyilvános,
Ja, REST api-ra gondoltam.
Egy statikus típusrendszer
Ezek az annotációk jól dokumentálják a kódot, és mindig naprakészek, szemben a kézikönyvvel vagy akár a kommentekkel, mert a fordító gondoskodik róla, hogy azok legyenek.
Ennél sokkal fontosabb, hogy fordítási időben kiderül, ha értelmetlen műveletet végzel, ezért soha nem fordulhat elő, hogy futási időben egyszercsak olyasmi történik, amivel a futtatókörnyezet nem tud mit kezdeni, mondjuk beleindexelsz egy logikai változóba (az egy null kivételével, ami egy csúnya rés a típusrendszeren, és a futásidejű hibák talán legnagyobb részéért felel).
Ez utóbbinak egy felbecsülhetetlen értékű gyakarlati következménye, hogy bármilyen módosítást végzel a kódban, mire kijavítasz minden fordítási hibát, garanciád van rá, hogy a kódod ismét helyesen működik. Tehát éppen az ellenkezője igaz annak, amit írsz: egy statikus típusrendszerrel sokkal gyorsabban tudod a kódodat a változó igényekhez igazítani, mert a helyes működés ellenőrzését automatizálja.
Az én személyes tapasztalatom, mióta statikus nyelvekre váltottam, hogy ha lefordult a kódom, gyakorlatilag biztos lehetek benne, hogy helyesen működik.
OOP nélkül is lehet kiváló
Persze, hogy lehet, csak nehezebb...
Ne tedd.