|
dev.gamez.lv Latvian Game Developers Community
|
View previous topic :: View next topic |
Author |
Message |
BHC
Joined: 31 Jan 2006 Posts: 81
|
Posted: Mon Feb 13, 2006 8:16 pm Post subject: Māca citus, part 1. |
|
Esmu nonācis pie slēdziena, ka ļoti daudzi LV tā saucamie "programmētāji" īstenībā nemāk programmēt. Tiesa, tas jau ir sen zināms fakts, bet es nezināju, ka tas ir tādā "līmenī".
Šodien man atkal parādīja kodu "C ar klasēm" stilā. Cilvēks galvoja, ka zin C++. Oh, mēn.
Bieži nākas redzēt šādus:
char kautkādsfiksētsbufferis[ 50 ];
Vai arī nedaudz advancētākus:
#define bufferizmērs 100
char bufferis[ bufferizmērs ];
Un tālāk seko kaut kāda operēsana ar pašu bufferi:
char buf[ 128 ];
float lol = 0.1337f;
sprintf( buf, " Aļoška sasita grozu ar olām, %f", lol );
( Tas tā īsumā, samērā nevainīgs piemērs, es esmu redzējis tādas briesmas, kad ar šiem bufferiem tiek kombinēti failu nosaukumi, to ekstensijas, utt. )
Kāpēc tā nevajadzētu(lasi, nedrīkst) darīt, jo "teh sprintf un printf taču roxorz teh bigoneone1"?
1. Buffera pārpilde.
2. Johaidī, tu gribi lai es atceros tos visus type-identifierus? %f, %d, etc?
3. Porkē man tie tipu identifieri vispār būtu jānorāda, es esmu slinks?
4. Galu galā, tas ir vienkārši neērti un nepareizi.
Patiesībā to pašu funkcionalitāti var iegūt daudz vienkāršāk un, galvenais, drošāk:
Inkludējam:
#include <sstream>
#include <string>
Piedefinējam streamu:
std::ostringstream ossPiemeers;
Močījam iekšā debesu brīnumus:
ossPiemeers << "Saņem " << 3.0f << std::string( " un vēl " ) << 7;
Piekļūstam pie stringa, respektīvi:
ossPiemeers.str(); // tips, protams, ir std::string
Ja ļoti gribās "vecos, labos C charus":
ossPiemeers.str().c_str();
std::istringstream ir tieši tas pats, bet cits "virziens", te mēs no stringiem lādējam mainīgajos.
Būtībā, lai nejauktu galvu, var uzreiz vienkārši izmantot std::stringstream, kas strādā abos virzienos.
std::stringstream ssDivvirziens;
float pi;
ssDivvirziens << "3.145";
ssDivvirziens >> pi;
Baigi ērti, ne, ne, ne?
P.S. Es nemāku programmēt.
P.S.S. Labojiet.
P.S.S.S. Ja kāds(mācētājs) turpinās tradīciju rakstīt nelielas C++ programmēšanas pamācībiņas, būtu ļoti pateicīgs. Un būtībā cerams, ka iesācēji tās novērtēs, jo dīvainā kārtā parasti "programmētāji" bez maz vai baidās no keywordiem template, STL, konteineriem, u.c. ļoti efektīvām metodēm un uztver tos kā kaut kādus "mistiskus" šaušalīgi kompleksus bumbuļus. (like nesarežģī sev dzīvi, lieto char masīvus, utml). _________________ Screenshot coming when hell freezes over. |
|
Back to top |
|
|
ugizs
Joined: 07 Jan 2006 Posts: 119
|
Posted: Mon Feb 13, 2006 9:26 pm Post subject: |
|
mana pasaule ir sagruvusi
man likās, ka , piemēram, int cipari[kaut kāds skaitlis] ir tīri laba lieta...
ļoti ceru, ka es vnk esmu steigā un nepareizi izlasījis tekstu |
|
Back to top |
|
|
gazz
Joined: 03 Jan 2004 Posts: 355 Location: Teika
|
Posted: Mon Feb 13, 2006 9:31 pm Post subject: |
|
runa neiet par vienkaarshiem masiiviem, bet gan par "C pret C++" darbiibu ar teksta stringiem. Kaut gan standartmasiivu vietaa arii visbiezhaak ir eertaak un vienkaarhsaak lietot STL kolekcijas kaa Vector<> |
|
Back to top |
|
|
ugizs
Joined: 07 Jan 2006 Posts: 119
|
Posted: Mon Feb 13, 2006 9:33 pm Post subject: |
|
nu pag, ta es nebūšu dolbs, ja izmantošu parastos masīvus? |
|
Back to top |
|
|
BHC
Joined: 31 Jan 2006 Posts: 81
|
Posted: Mon Feb 13, 2006 9:57 pm Post subject: |
|
ugizs wrote: | nu pag, ta es nebūšu dolbs, ja izmantošu parastos masīvus? |
Parasto fiksēto masīvu izmantošana ir pat baigi OK, ja tu zini, ka tavā specifiskā gadījumā ir vajadzīgs tieši fiksēta izmēra masīvs, kurš pavisam noteikti netiks indeksēts ārpus robežas, tad go for it.
Bet, kad statiski masīvi tiek izmantoti, lai manipulētu ar simbolu virknēm, tas pavisam noteikti nav pareizs stils(as for C++). _________________ Screenshot coming when hell freezes over. |
|
Back to top |
|
|
Himself Indago dalībnieks
Joined: 13 Apr 2004 Posts: 87 Location: Rīga
|
Posted: Mon Feb 13, 2006 10:33 pm Post subject: |
|
mjā, programmēšana kā modes skate _________________ Paldies |
|
Back to top |
|
|
fest
Joined: 07 Apr 2003 Posts: 187 Location: Madona
|
Posted: Tue Feb 14, 2006 11:36 am Post subject: |
|
BHC, labs rakstiņš ;D _________________ Signature for rent. Good as new.
4 lines max. 80 letters.
Ls 0,02/post
|
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Tue Feb 14, 2006 12:27 pm Post subject: |
|
Nu BHC!!! Tu jau kjeries pie personiskiem apvainojumiem? Tieshi tu esi tas... Tu doma,ka cilveki kas ilgu gadu garumaa programme un ir pat sarakstijushi graamatas izmantojot:
Code: | char aa[MAX_PATH];
sprintf(aa,"teksts");
funkcija(aa); |
tagad pekshnji delj tevis mainis visu dzivi?Ja gribi-uzrakstishu tos gramatu sarakstus,kur maca ka taisit 3D engines vai speles,kur nav ne minjas no <string> (tici man to ir daudz).Ka es nevaru ciest tadus ka tu,kas uzskata ka TIKAI tavs variants ir pareizas.char aa[MAX_PATH] NAV nepareizi.Es arii nesaku ka tavs variants ir nepareizs,bet nesac uzreiz apvainot tos,kas neizmanto tavu variantu.
Code: | #define MAX_PATH 260 |
Nevaru iedomaties kadai programmai jabut lai parsniegtu sho limitu. Visaa sjajaa postaa ir ap 1000 burtu-nedomaaju,ka tev buus tik garsh error message vai kas cits.Un ja runaa par failiem,tad MAX_PATH arii noraada-maksimaalo faila nosaukuma garumu(ja tas ir garaaks,tad saiisini to izmantojot old-style (c:\folder~1) un tev NOTEIKTI pietiks).
P.S. Tu piesaarnjo forumu ar nevajadzigam lietam (vai vismaz vareji turpinat ieprieksheejo topiku).Shii saruna ir tikpat bezjeedziiga cik OpenGL vs. DirectX. _________________ long time; /* know C */ |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Tue Feb 14, 2006 2:57 pm Post subject: |
|
elvman palasi ieprieksheejos postus. char aa[MAX_PATH] NAV nepareizi.
sprintf(aa,"teksts"); gan ir "nelabs stils" (nevis nepareizi). |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Tue Feb 14, 2006 3:26 pm Post subject: |
|
Ko?Kapec pie visiem svetajiem pipstikjiem tas nav labais stils?Kapec tad tada funkcija paraadaas gandriiz katraa tutorialii.Un ja jums tas nez kaadu iemeslu deelj liekas nelabais stils,tad lietojiet sprintf_s (ko Microsoft ieviesa jaunajaa Platform SDK).
Es te smadzenes otraadi esmu apgriezis domaajot kaapeec tas vareetu buut nelabais stils.Un tik un taa nevaru izdomaat.Ja mums ir rezerveeta atminja aa[MAX_PATH], tad kaadeelj pie visiem augstakminetajiem objektiem es vinjaa ar sprintf nevaretu izmainit pirmos 6 baitus ("teksts")? _________________ long time; /* know C */ |
|
Back to top |
|
|
BHC
Joined: 31 Jan 2006 Posts: 81
|
Posted: Tue Feb 14, 2006 3:42 pm Post subject: |
|
elvman wrote: | Nu BHC!!! Tu jau kjeries pie personiskiem
apvainojumiem? | Where is one?
Quote: |
Tieshi tu esi tas... Tu doma,ka cilveki kas ilgu gadu garumaa programme un ir pat sarakstijushi graamatas izmantojot:
Code: | char aa[MAX_PATH];
sprintf(aa,"teksts");
funkcija(aa); |
|
Bieži vien grāmatās kods ir pielāgots vidusmēra lasītājam un ir "vienkāršots". Pie tam, ja tā grāmata ir par dzinējiem iekš C?
Quote: | tagad pekshnji delj tevis mainis visu dzivi? |
* sigh *
"Visu dzīvi?"
Dēļ manis?
Manis labad?
Tu domā, ka man gribas tev kaut ko mācīt? Tu man esi vienaldzīgs. Tas, kas gribēs uzlabot savu programmēšanas stilistiku, paklausīsies.
Quote: | Ja gribi-uzrakstishu tos gramatu sarakstus,kur maca ka taisit 3D engines vai speles,kur nav ne minjas no <string> (tici man to ir daudz). | Neskaitāmi 3d dzinēji ir rakstīti ieks C.
Quote: | Ka es nevaru ciest tadus ka tu,kas uzskata ka TIKAI tavs variants ir pareizas.char aa[MAX_PATH] NAV nepareizi. |
Pirmkārt, man pilnīgi vienalga, ko tu nevari ciest. Otrkārt, es neteicu, ka mans variants ir vienīgais pareizais(tagad es to pasaku - tas vienīgais pareizais(priekš manis, bet priekš tevis var palikt tavējais)). Es neesmu rakstījis, ka char[] nav pareizi(es esmu), jo, redzi, tu tā vari rakstīt un tas strādā. :)
Quote: | Es arii nesaku ka tavs variants ir nepareizs,bet nesac uzreiz apvainot tos,kas neizmanto tavu variantu. |
Neesmu apvainojis. Gribu pamācīt, kā būtu labāk.
Quote: |
Code: | #define MAX_PATH 260 |
Nevaru iedomaties kadai programmai jabut lai parsniegtu sho limitu.
|
Es varu. 260 simbolu garu faila ceļu var pavisam viegli sasniegt, ja es parakātos par savu instalācijas diru, noteikti atrastu bez problēmām.
Un, ja tavu spēli spēlēs vairāk cilvēki (nevis tikai tu pats un tava ome), tad noteikti atradīsies kāds, kam spēles dira būs norakta dziļi jo dziļi.
Quote: | Visaa sjajaa postaa ir ap 1000 burtu-nedomaaju,ka tev buus tik garsh error message vai kas cits.Un ja runaa par failiem,tad MAX_PATH arii noraada-maksimaalo faila nosaukuma garumu(ja tas ir garaaks,tad saiisini to izmantojot old-style (c:\folder~1) un tev NOTEIKTI pietiks). |
Priekš kam man ir kaut kas jāīsina uz kaut kādu "old-style". Es atkārtošos, parasti programmētāji ir slinki un cenšas iztikt bez pilnīgi nevajadzīgām darbībām un koda rindām.
Quote: | P.S. Tu piesaarnjo forumu ar nevajadzigam lietam (vai vismaz vareji turpinat ieprieksheejo topiku).Shii saruna ir tikpat bezjeedziiga cik OpenGL vs. DirectX. |
Tu mani pārsteidz elvman.
Liek pārdomāt iesaknējušos pozitīvos steriotipus par Indago dalībniekiem. _________________ Screenshot coming when hell freezes over. |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Tue Feb 14, 2006 4:14 pm Post subject: |
|
Quote: | Neskaitāmi 3d dzinēji ir rakstīti ieks C. |
Nee es nerunaaju par C.Kapec tu esi kaa atskabarga?Pats saproti ka sheit runa iet par C++.
Un vispaar tev forshi argumenti kaapeec nelietot sprintf:
Quote: | 1. Buffera pārpilde.
2. Johaidī, tu gribi lai es atceros tos visus type-identifierus? %f, %d, etc?
3. Porkē man tie tipu identifieri vispār būtu jānorāda, es esmu slinks?
4. Galu galā, tas ir vienkārši neērti un nepareizi.
|
1. argumentu mes jau apspriedaam,bet
2. arguments=3.arguments=4.arguments=0;
It seviskji shii rindinja:"4. Galu galā, tas ir vienkārši neērti un nepareizi.
".Ha ha.Tu esi vienkarshi ienjemis galva ka tas nav pareizi un viss un neviens tevi neapstrides (bet argumentu tev nav)-forsha attieksme.
Quote: | man pilnīgi vienalga, ko tu nevari ciest. |
Nu tad neposto shijaa forumaa,jo varbuut visiem ir vienalga tavas domas par string klasi!
Quote: | Esmu nonācis pie slēdziena, ka ļoti daudzi LV tā saucamie "programmētāji" īstenībā nemāk programmēt |
RUPJI,RUPJI,RUPJI!
Arii sho vareetu uztvert par apvainojumu:
Quote: | parasti "programmētāji" bez maz vai baidās no keywordiem template, STL, konteineriem, u.c. ļoti efektīvām metodēm un uztver tos kā kaut kādus "mistiskus" šaušalīgi kompleksus bumbuļus. |
PS. Ko tu centies ar sho panaakt.Tu tiesham gribi lai pekshnji visi saak lietot string klasi?Vai arii esi kaarteejeais kas ienaak forumaa un saak visus maaciit? _________________ long time; /* know C */ |
|
Back to top |
|
|
BHC
Joined: 31 Jan 2006 Posts: 81
|
Posted: Tue Feb 14, 2006 4:31 pm Post subject: |
|
elvman wrote: | Quote: | Neskaitāmi 3d dzinēji ir rakstīti ieks C. |
Nee es nerunaaju par C.Kapec tu esi kaa atskabarga?Pats saproti ka sheit runa iet par C++.
|
Tāpēc, ka ir programmētāji, kas nesaprot atšķirību starp C un C++.
Līdz ar C++ ne tikai nāk klāt jaunas fīčas, bet tiek izmantotas citas izstrādes pieejas un patterni.
Quote: | 1. Buffera pārpilde.
2. Johaidī, tu gribi lai es atceros tos visus type-identifierus? %f, %d, etc?
3. Porkē man tie tipu identifieri vispār būtu jānorāda, es esmu slinks?
4. Galu galā, tas ir vienkārši neērti un nepareizi.
|
Quote: | 1. argumentu mes jau apspriedaam,bet
2. arguments=3.arguments=4.arguments=0;
It seviskji shii rindinja:"4. Galu galā, tas ir vienkārši neērti un nepareizi.
".Ha ha.Tu esi vienkarshi ienjemis galva ka tas nav pareizi un viss un neviens tevi neapstrides (bet argumentu tev nav)-forsha attieksme. |
1. arguments ir pavisam skaidrs pat tev.
2. un 3. arguments arī ir loģisks.
4. par neērtumu arī.
Nepareizi? Kur? Labo?
Quote: | Quote: | man pilnīgi vienalga, ko tu nevari ciest. |
Nu tad neposto shijaa forumaa,jo varbuut visiem ir vienalga tavas domas par string klasi! | Es runāju par tieši tevi kā indivīdu, tieši tavas domas mani neinteresē(vairs).
Quote: |
Quote: | Esmu nonācis pie slēdziena, ka ļoti daudzi LV tā saucamie "programmētāji" īstenībā nemāk programmēt |
RUPJI,RUPJI,RUPJI! | Rupji? - Tā ir skarbā patiesība.
Quote: | Arii sho vareetu uztvert par apvainojumu:
Quote: | parasti "programmētāji" bez maz vai baidās no keywordiem template, STL, konteineriem, u.c. ļoti efektīvām metodēm un uztver tos kā kaut kādus "mistiskus" šaušalīgi kompleksus bumbuļus. |
|
Tu vari jebko uztvert par apvainojumu, pilnīgi jebko.
Quote: | PS. Ko tu centies ar sho panaakt.Tu tiesham gribi lai pekshnji visi saak lietot string klasi?Vai arii esi kaarteejeais kas ienaak forumaa un saak visus maaciit? |
Ko es cenšos panākt?
1. Dalīties ar pieredzi.
2. Iemācīties ko jaunu.
3. Pamācīt tos, kas grib kaut ko jaunu iemācīties.
Visu es pateicu vairāk vai mazāk skaidri un argumentēti. _________________ Screenshot coming when hell freezes over. |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Tue Feb 14, 2006 5:00 pm Post subject: |
|
Starp citu testi pierada,ka char darbibu izdara 6 reizes atrak,kaa string.Ja tu vismaz KAUTKO saproti no programmeeshanas,tad sapratiisi,ka vards "atrak" ir labas (pat ljoti labs,programmeeshanas meerkjis).
Un tavs arguments-"es esmu slinks" pret atrumu ir 0 (NULLE ar lielo N).
Arii string ir bufferis,kuraa vinsh glabaa simbolu virkni.Tam visu laiku ir jaapalielinaas vai jaasamazinaas,kas arii prasa aatrumu (nerunajot jau par pashu klasi).Arii shim buferim ir savs lielums (dinamisks).Ja iekopeesi lielaaku tekstu shajaa bufferii (ar c_str()),tad rezultaats buus daudz sliktaaks,kaa ja tu rezerveetu buferi (char aa[MAX_PATH]) jau ieprieks.
Un vispar padomaa vienreiz logjiski-ja reiz tu maci jauninjos,tad pasaki, kapec nevienaa c++ tutoriaalii iesaaceejiem saakumaa ir nevis string bet char array.Domaa taa ir sakritiiba (un patiesiibaa reti kursh totorial maaca par string klasi)? _________________ long time; /* know C */ |
|
Back to top |
|
|
GiGa Indago Uzvarētājs
Joined: 25 Sep 2003 Posts: 887
|
Posted: Tue Feb 14, 2006 5:33 pm Post subject: |
|
Elvman, pastaaveshana par savu viedokli, protams, ir laba lieta, bet shoreiz iesaku paklausiit BHC :)
Arguments par string aatrumu ir mazsvariigs - kur reaali tu satiecies ar programmu, kuras bottlenecks var buut string klases aatruma deelj? Un ja arii rodas taads iipashs gadiijums, luudzu, izmanto char[] specifiskajaa gadiijumaa, bet eertums, kuru ienes string klase, daudzkaart atsver string klases runtime leenumu saliidzinot ar char[], nemaz nerunaajot par diivainajiem un gruuti atrodamajiem bugiem, kuri var rasties string vietaa lietojot char[], vai std::array un std::list vietaa lietojot Class[]. Kaut kur atceros lasiijis labu citaatu: "CPU cycles are cheap, man-hours are not." Lietojot C++ iespeejas liidz maksimumam, development taims manaami saruuk, gan uz develpment gan debug reekjina, un prasmiigi kodeejot arii izpildes laiks nemaz nebuus tik traki sliktaaks.
Un par tiem tutoriaaljiem - vispirms jauninjos iepaziistina ar char[], jo string klasee taads tiek izmantots, un aptvert taadu lietu kaa masiivs, laikam ir vieglaak, nekaa class'e, dinamiskaas atminjas izdaliishana, construktori un destruktori reizee - atceries, ka std::cout tutoriaaljos paraadas daudz aatraak, nekaa klase, buutu jociigi, ja tur jau saaktu std::string jaukt iekshaa. Turklaat ir ljoti svariigi saakumaa saprast kas ir pointers un kaa var veersties pie atseviskjiem char[] elementiem un kaa tie izkaartoti atminjaa (jaa, ka par briinumu jauninjajiem tas neskjiet tik viegli ) |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|