dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

Māca citus, part 1.
Goto page 1, 2, 3, 4  Next
 
dev.gamez.lv Forum Index -> Programmēšana
View previous topic :: View next topic  
Author Message
BHC



Joined: 31 Jan 2006
Posts: 81

PostPosted: 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
View user's profile
ugizs



Joined: 07 Jan 2006
Posts: 119

PostPosted: Mon Feb 13, 2006 9:26 pm    Post subject:

mana pasaule ir sagruvusi Sad
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 Smile
Back to top
View user's profile
gazz



Joined: 03 Jan 2004
Posts: 355
Location: Teika

PostPosted: 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
View user's profile Send e-mail
ugizs



Joined: 07 Jan 2006
Posts: 119

PostPosted: Mon Feb 13, 2006 9:33 pm    Post subject:

nu pag, ta es nebūšu dolbs, ja izmantošu parastos masīvus? Smile
Back to top
View user's profile
BHC



Joined: 31 Jan 2006
Posts: 81

PostPosted: Mon Feb 13, 2006 9:57 pm    Post subject:

ugizs wrote:
nu pag, ta es nebūšu dolbs, ja izmantošu parastos masīvus? Smile

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
View user's profile
Himself
Indago dalībnieks
Indago dalībnieks


Joined: 13 Apr 2004
Posts: 87
Location: Rīga

PostPosted: Mon Feb 13, 2006 10:33 pm    Post subject:

mjā, programmēšana kā modes skate
_________________
Paldies
Back to top
View user's profile Send e-mail
fest



Joined: 07 Apr 2003
Posts: 187
Location: Madona

PostPosted: 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
View user's profile Send e-mail
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: 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
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: 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
View user's profile Visit poster's website
BHC



Joined: 31 Jan 2006
Posts: 81

PostPosted: 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?" Very Happy
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
View user's profile
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: 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:
Where is one?


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
View user's profile Visit poster's website
BHC



Joined: 31 Jan 2006
Posts: 81

PostPosted: 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:
Where is one?


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
View user's profile
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: 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
View user's profile Visit poster's website
GiGa
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 25 Sep 2003
Posts: 887

PostPosted: 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 Smile )
Back to top
View user's profile Send e-mail
Display posts from previous:   
dev.gamez.lv Forum Index -> Programmēšana All times are GMT + 2 Hours
Goto page 1, 2, 3, 4  Next
Page 1 of 4

 
Jump to:  
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