sem taky videl toto:
10 PRINT "AHOJ : GOTO 20
20 neco : GOTO 30
30 ......
proste tomu cloveku nerekli, ze zpracovani automaticky pokracuje na dalsim radku.
jinak myslim, ze BASIC je pro zacatecniky dobrej,
jednoduchej. nemusi se kontrolovat ENDy a tak.
presne, kdo chce psat prasacky, dokaze to v cemkoli.
jj, me nerekli tu drobnost, ze existuje i jiny prikaz nez GOTO LINE xx. Takze program jsem psal typem...
10:neco
20:neco
pak jsem to prepsal
10:neco
15:neco
20:GOTO LINE 15
Jaksi jsem pozapomel ze existovali i astupne symboli :-) Takze proto se psalo po 10 radcich, abyste mezi to mohli jeste neco vlozit.. Pak to vypadalo tak, ze jste mezi 10 radek potrebovali narvat 100 radek kodu, takze jste odskocili jinam atd... Novejsi Basic nejsou nastesti tak strasne a umej posouvat radky kodu :-)
Kdo chce psát prasácky, dokáže to v čemkoli, ale důležité je, aby nemusel, zejména, když se učí programovat.
Taky jsem začínal na BASICu (a assembleru, resp. já tehdy psal přímo kódy instrukcí v hex-editoru :-) a není to dobrý jazyk pro začátečníky.
Dobrý jazyk pro začátečníky by měl umožňovat soustředit se na problém namísto válčení s podružnostmi. Takže by měl být (1) interpretovaný (nebo zcela transparentně kompilovaný), (2) mít přehlednou syntaxi a (3) umožňovat všechny základní programovací konstrukce bez nějakých triků.
BASIC: jen (1).
Assembler: nic.
Pascal a C: částečně (2) a (3).
Java: částečně (2) a (3).
Python: (1) a (2) a částečně (3).
Souhlasim. Pascal (jak je notoricky znamo) byl primo navrzen pro vyuku programovani. Ja osobne si myslim, ze je pro zacatecniky nejlepsi, protoze je relativne high-level, strukturovany, a jeho prekladace jsou rychle i na 386. Ja zacal v r. 1991 v Pascalu, pozdeji pro me bylo velmi snadne prejit na C, C++ a Javu. To bych se napotil, kdybych zacal s Basicem a pak se snazil zbavit navyku na GOTO...
PascaL byl strasna nuda. Porad nejaky inicializace, a tak, stve mi to doted, libi se mi PHP ;)
Nechapu, proc se z Basicu porad mluvi jen o tom strasnem cislovani radku. To byla vlastne jen pomucka, protoze nebyly fullscreen editory - pouze 8mi bity mely debilni Basicy - krome Sharpu MZ-800, ktery mel prikaz "renum", ktery se vsechno presilovalo opet po desitkovych krocich. Misto GOTO 10 se pouzival prikaz
GOTO "navesti" a navesti se definovalo LABEL "navesti", a to uz bylo docela prijemne.
A co teprve Turbo Basic na IBM PC - to byla uz docela pohoda, akorat u nas chybela dokumentace, protoze vsichni se hnali po hlave do Pascalu.
Basic je docela prijemna koncepce programovani, kterou temer beze zbytku prejima treba PHP, Perl, a dalsi jazyky. Dalo by se to shrnout tim, ze program nezacina ve vzduchoprazdnu, ale uz urcitem predem definovanem prostredi, takze bez jakychkoliv inicializaci, zavadeni knihoven, apod. muzu rovnou zacit treba kreslit geometricke utvary po obrazovce, nebo vypisovat text, nebo tak. Proste jenom programuju - a nestaram se include fajly, deklarace promennych nebo dokonce celych procedur pred zacatkem programu, apod.
Jak rikam, je skoda, ze par debilnich implementaci Basicu, jmenovite ZX Spectrum Basic (nemel ani ELSE!), IQ 151 basic, G-BASIC na PMD, Atari Basic a Commodore Basic (nejcastejsi prikaz: POKE ;-), a caste pretiskovani vsech tech zrudnosti v ruznych casopisech pro mladez, vyvolalo v tuzemskych kruzich takovou nechut k Basicu a naprosto nesmyslny obdiv k tak naprosto nepouzitelnemu pajazyku, jako je Pascal. (Kdyz uz, tak C aspon cloveka primeje uvazovat napul v assembleru, a tudiz optimalne ;-).
Shrnuti - Basic jaky doopravdy je:
1) nemusi se v nem cislovat radky
2) existuji lokalni promenne, kdyz to chceme
3) existuje moznost pouzivat rekurzi
Basic muze by tak strukturovany, jak strukturovany
program v nem napiseme. Vim, jaky byl muj sok,
kdyz jsem kdysi videl jakysi program v Basicu
psany pro Amigu, ktery se fakt hodne lisil od vseho
to 10 PRINT "ZADEJ CISLO", ktere si vsichni pod pojmene Basic predstavuji.
Skoda, ze pro Linux existuje tak malo Basic interpreteru - namatku tusim Yabasic, ktery splnuje podminku jednoduchosti, je to oficialni GNU projekt, ale neni... jak bych to rekl... neni tak docela nepodobny tomu Basicu pro Spectrum. Ale stejne - kreslit se v nem da po zavolani pouze jedineho prikazu "Window", ktery otevre X window - a to je velmi prijemne ;-)
Napsat vlastni dobry Basic interpreter, pripadne pre-compiler (generoval by se zdrojak v jazyce C, ktery by slo prelozit do EXE souboru), je muj dlouholety sen.
Existuje X-basic jako free v podobě interpreteru
(modul převádějící do .exe je za peníze), jak pro
wokna tak pro Linux. Odradila mě obrovská a nepřehledná
dokumentace (jen ta bazální má několik set stran)
a skutečnost, že se nedá pracovat s již naeditovanými
texty programů, ale musí se použít zaintegrované
prostředí s nepříliš kvalitním editorem.
On ten BASIC má jednu obrovskou výhodu: Dají se jím
napsat smysluplné (= v praxi použitelné) programy i
bez kompletní znalosti syntaxe. (Byť člověk po čase
zjistí, že s pomocí jiných příkazů by se to dalo
napsat líp).
U Pascalu (ale třeba i JAVY) strávíte spoustu času
bez toho, že byste byli schopni napsat kód, který
by byl k něčemu (a opisovat pečlivě vypreparované
"školní" programy je dost neefektivní).
Nehledě k tomu, že se posléze dostaneme k takovým
zbytečnostem, jako je objektové programování, jehož
smysl (vyjma rozdělení programu do samostatně odladitelných
modulů) jsem dodnes nepochopil a jehož logiku (např.
některé funkce jsou dostupné jen v dynamickém a některé
jen ve statickém kontextu - většinou ty, u kterých
by bylo potřeba, aby vzájemně splupracovaly) nechápu.
Jo, kdyby tak někdo napsal kopmilátor, který by
převedl program z BASICu do javovského bytového
kódu ...
smysl OOP ? zapouzdreni, dedicnost, polymorfismus. bez techto vlastnosti by program jako je treba muj dbMan nikdy nesel napsat tak pekne, prehledne a efektivne. a jak tu kdosi psal, ze myslet efektivne nuti C kvuli assembleru, tak to byl doufam vtip. efektivita neni o jazyku, ale o algoritmizaci. jazyk je jen prostredek vyjadrovani, tak jako jsou matematicke symboly a znamenka jednim ze zpusobu zapisu konkretnich fakt o realnem svete. a taky jsem tu cetl blabol o tom, ze perl cloveka nenuti deklarovat promenne a proto je skvelej. tak ja zacinam kazdy program v perlu use strict; prave proto, abych se donutil vsechno deklarovat. ale to je mozna jen o tom, ze mne zivot naucil, ze deklarovanim zabranim desitkem trapnych a zbytecnych chyb a proto se mi cas venovany deklaracim velmi rychle vrati v odvsivovani programu. to jen tak ze uz jsem nevydrzel cist kvanta nesmyslu.
1. Zapouzdření se dá nahradit i v tom basicu tím, že
prostě nebudu dělat GOTO do procedur a podprogramů
(a pár podobných skopičin).
2. Dědičnost a polymorfismus docela dobře nahrazují
funkce COPY a PASTE při psaní programu (nehledě k tomu,
že většina inteligentnějších programátorů to dokáže
vyřešit univerzálněji napsanými procedurami, napsanými
jednou pro vždy pro celý program).
Jinak jen narůstá balastní kód (import tříd, z nichž
využívám třeba jen jednu metodu) a vytvářením objektů
roste nárok na paměť počítače a její obsluhu (tedy i
rychlost počítače). Prakticky neexistuje problém, který
by objektové programy řešily efektivněji než neobjektové.
Ty jsi snad spadl z visne nebo co? Zapouzdreni jaksi plne v basicu (a snad ani v jinem neobjektovem prog. jaz. - ale nechci se o tom hadat, nevim) proste neudelas,
Dedicnost a polymorfismus NENAHRADI zadne copy a paste - to je proste nesmysl, kteremu snad ani ty sam nemuzes verit - jak bys pak asi tak udelal nejakou zmenu, kdyz bys to 10x zkopcil a zjistil ze je to spatne? Univerzalne napsane procedury by to mozna castecne vyresily, ale plne nikoliv. Take dedicnost asi nicim moc nenahradis - to je proste tak skvela vlastnost objektu, ktera kdyz jsem byl nucen psat v C mi opravdu velmi a velmi chybela, stejne jako zapouzdreni.
Import trid nedela v Jave vlastne vubec nic, tim jenom prekladaci oznamujes, ze ma identifikatory hledat taky nekde jinde. Muzes klidne psat uplne bez importu - pak ale musis vsude vypisovat cele cesty a jmena trid. Importem java nevytvari zadne objekty ani nic jineho - je to pouze poznamka pro prekladac, abys nemusel vypisovat cele napr. "javax.swing.JLabel" tak si importnes "javax.swing.*" a muzes pak psat jenom "JLabel", prekladac uz si zjisti, ze tim myslis to "javax.swing.JLabel". Import proste nic jineho neznamena.
Omlouvam se za prispevek - nasel jsem tento clanek a reakci na nej jen nahodou. S OOP jsem se poprve setkal v roce 92 na skole a pri prvnim nahlednuti ho jako 90% mych spoluzaku povazoval za zbytecnost. Pak jsem si dal tu praci a PROSTUDOVAL (ne procetl) jsem si uvod do OOP v prirucce TurboPascalu 5.5 (mimochodem podle meho nejlepe napsany navod na pochopeni OOP co jsem dodnes cetl). Krok za krokem jsem delal vse jak bylo psano a vytvoril primitivni editor obrazcu v OOP. Az kdyz fungoval, pochopil jsem jak je to mocny nastroj. Dnes patrim mezi pojidace kolacu (lidi z VUT Brno z konce 80let minuleho stoleti vi co to znamena) - na PC programuji v DELPHI. Zabyvam se ridicimy systemy stroju - 80% casu ASM pro 16bit Motoroly, 15% C++ pro Motoroly (prace s float je preci jen pohodlnejsi na necem vyzsim ;-) ) a 5% Delphi. Pokud se mam vyjadrit k jazykum obecne - zacinal jsem na Pascalu (kdyz nepocitam Basic na Spectru vypujcenem na weekend). Zkusil jsem Lisp, Prolog a dalsi jazyky na skole (linkovani neceho na ADT10.. nebo EC.... byl zazitek). Vetsina jazyku ma smysl a jak bylo receno - kdo umi napise smysluplnou vec i na TI57, kdo neumi muze psat v C-cku a presto mu na PC setriduje seznam o 5000 polozkach prez noc - to jsem na vlastni oci videl u jednoho ucetniho softu - pri setrizovani cca 5000 faktur dle casu to delal celou noc na Celeronu 600MHz. Soft byl psan "Panem Programatorem" v CPP. Tak nevim ci to byla chyba, predpokladam ze C-cka ne. Troufnu si rict, ze bych to mel na ADT rychleji i pouze se tremi paskovymi jednotkami (doufam ze to nekomu neco rika). Trochu jsem se rozkecal.
Zaver pojidace kolacu
1) OOP je jedinecny system a je potreba ho pochopit
2) Vetsina jazyku najde uplatneni - kazdy se hodi na neco jineho. Ideal jako "Na vsechno Javu" nebo "Na vsechno C++" je podle meho blbost.
Tak se mejte a odpustte, jestli jsem nekoho urazil, nebo jestli pisu blbosti.