» »

V kakšnem stilu pišete vašo kodo?

V kakšnem stilu pišete vašo kodo?

FTad ::

showsover je izjavil:

public class SomeClass
{
// pripravim parametre ---- ???
int i = ...
// grem iskat podatke v tabelo ---- ???
TableRead(...
// validacija ---- ???
Validate(...
}


Hehe, močno upam, da tile "---- ???" so samo primer nekega splošnega, ker so te stvari self-evident, če so variable/funkcije/metode/... smiselno poimenovani. Verjetno pa ne pričakujemo, da bo za nami kodo bral nekdo, ki mu te stvari niso kristalno jasne iz aviona. Ali??


Meni ti komentarji delujejo povsem odvec.



@WizzdardOfOz

/// <summary>
/// nabor podatkov iz tabele
/// osnovni zahtevek: 1234, osnovni nabor podatkov za validacijo, dne: 12.12.2020, kdo: nebivedu
/// popravek po zahtevku: 1235, spremenjeni parametri za nabor podatkov, dne: 15:12:2020, kdo: mr_chai
/// popravek po zahtevku: 1345, dodan parameter xxx zaradi validacije, dne: 17:12:2020, kdo: nebivedu
/// </summary>
public class SomeClass
{
  // pripravim parametre
  int i = ...
  // grem iskat podatke v tabelo
  TableRead(...
  // validacija
  Validate(...
}




A je to dejansko potrebno? A nima IDE kak version compare, kjer jasno kaze, kaj je bilo spremenjeno od zadnje verzije ter od koga? Sicer ni nic narobe, da se v komentar napise, stevilka zahtevka. Ampak bi to napisal direktno nad vrstico, kjer je bil nov del kode zapisan in ne na zacetku metode, kjer moraš potem ugibat, kje točno je bila sprememba narejena.

Zgodovina sprememb…

  • spremenil: FTad ()

showsover ::

IDE prikaže version history na osnovi integracije code versioning toola, text comparison pa naredi ide, ja. Ne gre za isto stvar. Tisto glede task reference in kratek povzetek je ok, ampak se tole izgubi... Za podrobnosti gledaš history, jasno. Ko zmergaš branch v main, tile mikro-komentarji nimajo neke posebne teže. Meni je sicer najbolj uporaben blame :-)

WizzardOfOZ ::

FTad je izjavil:

A je to dejansko potrebno? A nima IDE kak version compare, kjer jasno kaze, kaj je bilo spremenjeno od zadnje verzije ter od koga? Sicer ni nic narobe, da se v komentar napise, stevilka zahtevka. Ampak bi to napisal direktno nad vrstico, kjer je bil nov del kode zapisan in ne na zacetku metode, kjer moraš potem ugibat, kje točno je bila sprememba narejena.


Ko te čez več let vprašajo, zakaj tako in zakaj ne drugače, jim lahko takoj poveš kje je bilo točno to zahtevano. Se mi je že zgodilo, da so po 19ih (devetnajstih) letih prišli težit, da nekaj dela v mojem programu narobe. Po pregledu kode, smo prišli do dokumentacije korakov, kjer je bilo zapisano kdo je zahteval in zakaj je zahteval (in to ravno oseba, ki je po 19 letih prišla težiti), sem imel alibi. Drugače bi me pa po zobeh vlačili. Sem namreč delal v takem kolektivu, kjer si za napake drugih ti odgovarjal, če nisi imel črno na belem zakaj in kako.


Kodo za primer sem vzel za C#, ker večina to najbolj razume, pa zelo lepo se jo da napisat pregledno. Komentarjev v vsaki vrstici res ne rabiš, jih dajem samo, če je kakšna resna posebnost. V primeru sem jih pa dal, da se bolje vidi.
Jaz sicer programiram poleg .net, tudi še v dosti drugih jezikih (Cobol, Rexx, Assembler, ...) in vsi takih komentarjev nimajo. Poleg tega je lahko problematično verzioniranje, itd. Ampak če bi tisto kodo napisal, jih večina nebi vedla za kaj gre.
Recimo:
; kontrola semforja z 8086 mikroprocesorjem 

   #start=Semafor.exe#

   name "promet"


   mov ax, all_red
   out 4, ax


   mov si, offset situation


   next:
   mov ax, [si]
   out 4, ax

   ; wait 5 seconds (5 million microseconds) 
   mov     cx, 4Ch    ;    004C4B40h = 5,000,000 
   mov     dx, 4B40h
   mov     ah, 86h
   int     15h


   add si, 2 ; next situation 
   cmp si, sit_end
   jb  next
   mov si, offset situation
   jmp next

   ;                        FEDC_BA98_7654_3210 
   situation        dw      0000_0011_0000_1100b
   s1               dw      0000_0110_1001_1010b
   s2               dw      0000_1000_0110_0001b
   s3               dw      0000_1000_0110_0001b
   s4               dw      0000_0100_1101_0011b
   sit_end = $


   all_red          equ     0000_0010_0100_1001b


Je pa v mojem programskem jeziku prvih 8 znakov lahko datum. In v komentarju je na teh prvih osmih mestih tudi datum.

Torej nekako tako:
20201212   koda programja
20201215   koda programja
Milčinski je napisal butalce kot prispodobo in ne kot priročnik!!!
Svuda u svijetu ima budala ali je izgleda kod nas centrala!!!

FTad ::

WizzardOfOZ je izjavil:

FTad je izjavil:

A je to dejansko potrebno? A nima IDE kak version compare, kjer jasno kaze, kaj je bilo spremenjeno od zadnje verzije ter od koga? Sicer ni nic narobe, da se v komentar napise, stevilka zahtevka. Ampak bi to napisal direktno nad vrstico, kjer je bil nov del kode zapisan in ne na zacetku metode, kjer moraš potem ugibat, kje točno je bila sprememba narejena.


Ko te čez več let vprašajo, zakaj tako in zakaj ne drugače, jim lahko takoj poveš kje je bilo točno to zahtevano. Se mi je že zgodilo, da so po 19ih (devetnajstih) letih prišli težit, da nekaj dela v mojem programu narobe. Po pregledu kode, smo prišli do dokumentacije korakov, kjer je bilo zapisano kdo je zahteval in zakaj je zahteval (in to ravno oseba, ki je po 19 letih prišla težiti), sem imel alibi. Drugače bi me pa po zobeh vlačili. Sem namreč delal v takem kolektivu, kjer si za napake drugih ti odgovarjal, če nisi imel črno na belem zakaj in kako.


Kodo za primer sem vzel za C#, ker večina to najbolj razume, pa zelo lepo se jo da napisat pregledno. Komentarjev v vsaki vrstici res ne rabiš, jih dajem samo, če je kakšna resna posebnost. V primeru sem jih pa dal, da se bolje vidi.
Jaz sicer programiram poleg .net, tudi še v dosti drugih jezikih (Cobol, Rexx, Assembler, ...) in vsi takih komentarjev nimajo. Poleg tega je lahko problematično verzioniranje, itd. Ampak če bi tisto kodo napisal, jih večina nebi vedla za kaj gre.
Recimo:

; kontrola semforja z 8086 mikroprocesorjem

#start=Semafor.exe#

name "promet"


mov ax, all_red
out 4, ax


mov si, offset situation


next:
mov ax, [si]
out 4, ax

; wait 5 seconds (5 million microseconds)
mov cx, 4Ch ; 004C4B40h = 5,000,000
mov dx, 4B40h
mov ah, 86h
int 15h


add si, 2 ; next situation
cmp si, sit_end
jb next
mov si, offset situation
jmp next

; FEDC_BA98_7654_3210
situation dw 0000_0011_0000_1100b
s1 dw 0000_0110_1001_1010b
s2 dw 0000_1000_0110_0001b
s3 dw 0000_1000_0110_0001b
s4 dw 0000_0100_1101_0011b
sit_end = $


all_red equ 0000_0010_0100_1001b


Je pa v mojem programskem jeziku prvih 8 znakov lahko datum. In v komentarju je na teh prvih osmih mestih tudi datum.

Torej nekako tako:

20201212 koda programja
20201215 koda programja


Kot sem ze v prvem komentarju zapisal, se strinjam, da se ob vrstici, kjer je bila sprememba narejena, zapise stevilko zahtevka, da se hitro najde razlog cemu sprememba.

Pri takih primerjavah je pomembno, da se pove, o katerih prog. jezikih je govora. Vecinoma, ko se rece, da so komentarji smeiselni le v dolocenih primerih, sicer je bad practice, govorimo o visjenivojskih jezikih ala Java ipd. Seveda je v tvojem navedenem primeru v izredno pomoc komentar, kaj tisti sklop ukazov v assemblerju naredi.

kuall ::

Smisel komentiranja npr bloka spremnljivk je samo večja preglednost. Da lahko bolj hitro preskočiš tisti blok kode z očmi. Vidiš komentar, niti ne gledaš vse spremenljivk, in si lahko brez skrbi, da v tistem bloku ni nič zanimivega in greš dalje brati bolj zanimive dele. Ravno zaradi tega razloga je bolj pametno deklaracijo spremenljivk dati vse na vrh funkcije, da ne smetijo kode. Tako je ostala pomembna koda čimmanjša, kar pripomore k hitrejšemu razumevanju.

Sem pa bil enkrat na razgovoru in rekel unemu loleku, da kodo ločim na bloke. Ravno tako bebasto me je gledal kot vi zdajle in me seveda najbrž ravno zaradi tega mojega komnetarja ni vzel v službo. Še bolje, takih ljudi ne rabim gledat, s katerimi nismo na isti valovni dolžini.

Zgodovina sprememb…

  • spremenilo: kuall ()

kuall ::

napsy je izjavil:

Kar se tice foruma, bi mogoce bil zanimiv ekspreiment uvest nek tockovnik (kot npr. stackoverflow), kjer bi laho downvotal le, ce bi prispeval v sami debati.


Na stackoverflow sem med top 30%. Nisem prav dosti pisal, že več let ne pišem več, vseeno sem nabral kar nekaj točk, tak da moji odgovori znajo bit kar uporabni. Dosegel sem baje 2 milijona uporabnikov (tolikokrat so bili moji odgovori prebrani).

shadeX ::

Sem pa bil enkrat na razgovoru in rekel unemu loleku, da kodo ločim na bloke. Ravno tako bebasto me je gledal kot vi zdajle in me seveda najbrž ravno zaradi tega mojega komnetarja ni vzel v službo. Še bolje, takih ljudi ne rabim gledat, s katerimi nismo na isti valovni dolžini.


You really don't get the clues, don't you?

Ego ti ne dovoli, da vidiš jasno sliko, kaj se s tem dogaja. Sedaj imaš že nekaj vzorcev, zakaj misliš da bo naslednjič rezultat istega vzorca drugačen? Tvoj ego je tisti, ki ne dovoli da bi sprejel drugo mnenje (in to da se motiš), ter prišel na isto "valovno dolžino" kot drugi in si tako izboljšal možnosti za uspeh, kar posledično zavira tvoj razvoj.

Zgodovina sprememb…

  • spremenil: shadeX ()

napsy ::

kuall je izjavil:

Na stackoverflow sem med top 30% ...


May be, vendar tvoji komentarji tu gor vsekakor ne odrazajo tega.
"If you die, you die. But when you live you live. There is no time to waste."

kuall ::

shadeX je izjavil:

Tvoj ego je tisti, ki ne dovoli da bi sprejel drugo mnenje (in to da se motiš), ter prišel na isto "valovno dolžino" kot drugi in si tako izboljšal možnosti za uspeh, kar posledično zavira tvoj razvoj.

Moj razvoj gre čist ok ne skrbi zame. Sem našel ljudi, s katerimi smo na isti valovni dolžini.
Saj jaz sem tukaj, da se kaj naučim od vas. Še vedno čakam... Do zdaj sem vas moral jaz učiti, od vas sem nazaj dobival samo neko zgražanje brez razloga.

napsy ::

kuall je izjavil:

.. Saj jaz sem tukaj, da se kaj naučim od vas. Še vedno čakam... .


saj smo te poskusal, pa si nesposoben priznat, da nekaterih stvari se ne poznas dovolj.
"If you die, you die. But when you live you live. There is no time to waste."

shadeX ::

Moj razvoj gre čist ok ne skrbi zame.


In po kakšnih kriterijih ti to ocenjuješ? Kdaj veš, kdaj se tvoj razvoj ustavi oz. kaj ga zavira?

Sem našel ljudi, s katerimi smo na isti valovni dolžini.


Sej ravno to je narobe. "If you're the smartest person in the room, you're in the wrong room. - Lorne Michaels"


Saj jaz sem tukaj, da se kaj naučim od vas


Če se hočeš naučiti, boš moral začeti sprejemat mnenje, ki je drugačno od svojega in vzeti v zakup da ima tudi drugi lahko prav, sploh kadar je toliko indicev, da so verjetnosti da imaš ti prav smešno nizke.

Zgodovina sprememb…

  • spremenil: shadeX ()

kuall ::

napsy je izjavil:

saj smo te poskusal, pa si nesposoben priznat, da nekaterih stvari se ne poznas dovolj.

Jaz sem čist sposoben priznat, da sem prvič slišal za TECHNICAL DEBT. Pa mi gre brez tega znanja čist ok, ne mislim se začet učit teh stvari, ker jih ne rabim, me ne zanimajo.
Me pa čudi, da ti nečesa ne veš heh.


shadeX je izjavil:

In po kakšnih kriterijih ti to ocenjuješ? Kdaj veš, kdaj se tvoj razvoj ustavi oz. kaj ga zavira?


Rast plače je že dober pokazatelj.

shadeX je izjavil:


Sej ravno to je narobe. "If you're the smartest person in the room, you're in the wrong room. - Lorne Michaels"


Ja dolgčas rata. Tudi ko igram igrico je dolgčas, če vedno zmagam.


shadeX je izjavil:

Če se hočeš naučiti, boš moral začeti sprejemat mnenje, ki je drugačno od svojega in vzeti v zakup da ima tudi drugi lahko prav, sploh kadar je toliko indicev, da so verjetnosti da imaš ti prav smešno nizke.

V bistvu sem jaz tak človek, ki je precej nesiguren v sebe, stalno dvomim v sebe. Tak da kar budno spremljam kaj drugi mislijo in če je dobra praksa jo sprejmem. Npr od sodelavca v službi sem pobral kar nekaj dobrih programerskih praks, ker vem, da je v nekaterih stvareh on boljši kot jaz.

napsy ::

kuall je izjavil:


Jaz sem čist sposoben priznat, da sem prvič slišal za TECHNICAL DEBT. Pa mi gre brez tega znanja čist ok, ne mislim se začet učit teh stvari, ker jih ne rabim, me ne zanimajo.


Tist debt je sam en primer, ki sem se ga spomnil. Ko sem se sledil debato z ostalimi sem tudi videl, da morda se kake druge stvari ne razumes cisto dobro ali pa se sam ne znas dobro izrazit.

kuall je izjavil:


Me pa čudi, da ti nečesa ne veš heh.


Ne vem kaj naj bo to pomenilo ... vsekakor dost stvari ne vem, zadnje leto sem tudi bolj v management vodah in mogoce ne sledim toliko trendom.

kuall je izjavil:


Rast plače je že dober pokazatelj.


Rast place je lahko tudi samo posledica sistematizacije delovnih mest ali pa usklajevanje.
"If you die, you die. But when you live you live. There is no time to waste."

kuall ::

Ne raste vsem v firmi plača. In sem siguren, da če bi jim zatežil bi mi jo še zvišal ampak se ne bom šel tega, ker nisem zajeban. Bo že šlo navzgor lepo počasi. Če bom priden bo šlo, ni druge možnosti. Malo več moram delat, rad ratam len, to je moj problem.

Jaz berem tvoje twitte in tvoje blog poste. Sem se kaj naučil? Niti se ne morem zdajle spomnit. Nekaj si pisal o Agile al čem že. Imaš en občutek za ljudi, po moje si kar ok šef. Čeprav najboljši šef je un, za katerega še veš ne, da obstaja. Pred pol leta mi je eden za vašo firmo rekel, da ste jih morali dost odpustit.

Po moje me ne marate zaradi telesne govorice, ki je opazna tudi na forumu. Meni se stalno dogaja, da se ljudem okoli mene zmeša brez razloga. Kaj čmo, bomo preživel.
Počutim se kot Larry David med unimi loleki, ki se zgražajo in ga napačno razumejo. Ima una serija kar dost življenskih modrosti. Zgražanje brez razloga in namenoma napačno razumet človeka: to ljudje zelo radi delajo. To opaziš, če imaš dar za opazovanje, če ga nimaš pač spregledaš in zdajle ne veš, o čem govorim.

HotBurek ::

Povsem tehnicno vprasanje. Cemu nisi spremenljivke raje poimenoval date_start, ali pa datetime_start? Res da je funkcija kratka, ampak bi imo še za malenkost pohitrila razumevanje le te.


V osnovi gre za dvojni klik na be_se_do, ki je ločena z podčrtaji:

- v bluefish (html/css/js) izbere zgolj besedo in se ustavi pri podčrtaju (be_se_do)
- v pycharm (python) izbere celotno besedo (be_se_do)


In potem skačem iz enega v drugega. Če pridem iz bluefish v pycharm, mi ni do podčrtajev. Če pridem iz pycharm v bluefish, so mi podčrtaji kul. Na koncu je nastal en mal hlev s temi podčrtaji.

In je moteče, če je treba z miško označit celoten tekst, od začetka do konca (ali pa da se postaviš na konec, in potem ctrl+shift+levo). Je hitreje dvoklik.


Itak je pa več možnih zapisov:

funkcija getDate()
funckija GetDate()
funckija get_date()
funkcija getdate()


V JS pišem funkcije vse z malo, nekatere daljše s podčrtajom:
getdate()
get_something_and_convert_to_int()



V Pythonu pa sem začel poimenovat po sklopih, s podčrtaji ločim le prvi del, uporablja se tudi velika začetnica (razen za helper funkcije):

Helper: getdate(), gettime(), logging(), debugging()
(prva dva vračata string, druga dva vpisujeta string v log/debug file)

File system: FS_ReadFileIntoQueueItem(), FS_DeleteQueueItem()
(branje in zapisovanje v/iz queue)

Maria db: MDB_DoesShopProductComboExist(), MDB_InsertItem()
(branje/pisanje z bazo)

Http get: GET_DownloadImage()
(network komunikacija)

PIL: PIL_MakeThumbnailPicture()
(delo s slikami)

Threading: THR_IsAnotherThreadRunning()
(ne gre za taprav threading (prav bi bilo process, ampak sem uporabil trhead. that's one of thoes...),
ampak za to, da z popen odpiram en in ist process, večkrat, le-ta pa se bo štartal,
če trenutno že ne laufa tak process. se prav, da je vedno single mode...)

Processes: PROC_ProcessQueueFiles()
(processes so na začetku, v main-u, kjer se odloča, kater (večji) del kode oz. veje se bo poganjalo)


V Maria DB pa procedure poimenujem tako:

SP_DoesShopProductComboExist



To je to.
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

Zgodovina sprememb…

  • spremenilo: HotBurek ()

showsover ::

Načeloma ničesar novega ni potrebno odkrivati glede poimenovanj...
Klik.

FTad ::

@HotBurek

hvala za pojasnilo. Navajen sem na sintakso in "guidlines" za programiranje v ABAP-u, pa pozabljam, da je v drugih jezikih malenkost drugace. Npr v ABAPu ne moremo kombinirati velikih in malih crk ala getData(), ker ti glede na nastavitev ukaze vse zapise z velikimi ali maliim crkami.

Jirzy ::

Jaz pisem tako, kot imamo definirano v podjetju - za C++ CamelCase, za python camelCase.
Ce pa imam kje vecje stevilo metod, ki pocnejo sorodno stvar, jih dodatno oznacim z _.

Primer:
bool Initialize(uint32_t Flags);
bool GetVersion();
...
bool HWState_IsPowered();
bool HWState_IsConfigured();
bool HWState_CanCommunicate();

Smurf ::

Ce imas vecje stevilo metod, ki se nanasajo na nekaj podobnega kot je tukaj HWState je za razmisliti, ce ni vredno naresti posebnega classa za tole (ampak v bistvu je precej odvisno od primer do primera). Osebno tudi ne maram mesanje camelcase s podcrtaji.

kuall ::

Oboje je prav, nov class ali ista imena. Vse ima svoje plus in minuse. Če narediš nov class bo bolj pregledno. Če uporabiš ista imena bo manj dela in bolj enostavno.

BMK kaj ti osebno ne maraš. Podčrtaji so čist prava izbira tukaj. Mindset nooba je tak, da misli, da je samo en način programiranja pravilen. V resnici je pravilnih mnogo načinov. Groza, če naletiš na šefka, ki tega ni zmožen razumet.

Smurf ::

Ce tebe ne zanima praksa dobrega pisanja kode, se ne pomeni da koga drugega ne. Nenazadnje je prav ta tema namenjena temu, za razliko od tvojih custvenih izpovedih o sefih.

BigWhale ::

V Pythonu je za poimenovanje metod in funckij preferred metoda snake case (hwstate_is_powered), CamelCase se uporablja za TypedVariables (glej PEP8).

Pravilen je pa samo en nacin, tisti, ki je definiran na ravni projekta oziroma, se bolje, na ravni podjetja.

Jirzy ::

@Smurf: ja, ce jih je veliko se splaca. Ce jih je pa obvladljivo stevilo, hkrati pa potrebujejo 'intimno' poznavanje classa, lahko po mojem mnenju ostanejo tako, kot je v mojem primeru.
@BigWhale: tako je, potrebno je uporabiti enak slog, kot ostali na projektu oz. v podjetju. Najgrse je, ko naletis na kaksno legacy kodo, kjer so vsi stili med sabo pomesani.

techfreak :) ::

BigWhale je izjavil:

Pravilen je pa samo en nacin, tisti, ki je definiran na ravni projekta oziroma, se bolje, na ravni podjetja.
Kar pa bi moralo slediti uradnim oz. splosno sprejetim style guide-om kot je PEP8, z opcijskimi manjsimi popravki (npr. daljse vrstice.) Potrebno je upostevati, da ima vsak jezik drugega, da ne bo nekdo zacel PHP pisati po PEP8.

napsy ::

Obicajno imajo ekipe nek coding guidelines in je tam notri opisan stil kodiranja. Kar je super, ker zagotavlja enostnost kode, vendar ni nujno, da je ta guideline tudi napisan po dobrih praksah. Ce so v tem guideline slabe prakse, se zagotovo splaca se uskladiti z vodjo ekipe/oddelka.

Jirzy je izjavil:

Jaz pisem tako, kot imamo definirano v podjetju - za C++ CamelCase, za python camelCase.
Ce pa imam kje vecje stevilo metod, ki pocnejo sorodno stvar, jih dodatno oznacim z _.


Kot omenjeno, tudi jaz bi svetoval (za napisan primer), da naredis nek class in pod njim spises sorodne metode.
"If you die, you die. But when you live you live. There is no time to waste."

FTad ::

napsy je izjavil:

Obicajno imajo ekipe nek coding guidelines in je tam notri opisan stil kodiranja. Kar je super, ker zagotavlja enostnost kode, vendar ni nujno, da je ta guideline tudi napisan po dobrih praksah. Ce so v tem guideline slabe prakse, se zagotovo splaca se uskladiti z vodjo ekipe/oddelka.

Jirzy je izjavil:

Jaz pisem tako, kot imamo definirano v podjetju - za C++ CamelCase, za python camelCase.
Ce pa imam kje vecje stevilo metod, ki pocnejo sorodno stvar, jih dodatno oznacim z _.


Kot omenjeno, tudi jaz bi svetoval (za napisan primer), da naredis nek class in pod njim spises sorodne metode.


Pa se v tem primeru splača pisati posebej class?

1. Se bodo tiste metode uporabljale tudi kje drugje?
2. Je za pričakovati, da se lahko znotraj tega classa poveča število metod, da se upraviči pisanje posebej classa?
3. Bi se splačalo pisati posebej class, če bi imeli samo 2 metodi in niti ne veste, če bi ju lahko uporabili kasneje v kakem drugem programu?
3.a. ali šele kasneje, ko pridete do take situacije, iz teh funkcij napisete class, vstavite metode in potem zamenjate funkcije s klici teh metod?

To sprašujem čisto resno, saj me zanima, kako oz na podlagi kakšnih izkušenj se odločate iz takih situacij pisati posebej class.

SloKin ::

/// <summary>
/// nabor podatkov iz tabele
/// osnovni zahtevek: 1234, osnovni nabor podatkov za validacijo, dne: 12.12.2020, kdo: nebivedu
/// popravek po zahtevku: 1235, spremenjeni parametri za nabor podatkov, dne: 15:12:2020, kdo: mr_chai
/// popravek po zahtevku: 1345, dodan parameter xxx zaradi validacije, dne: 17:12:2020, kdo: nebivedu
/// </summary>
public class SomeClass
{
  // pripravim parametre
  int i = ...
  // grem iskat podatke v tabelo
  TableRead(...
  // validacija
  Validate(...
}

Tile komentarji sprememb so uporabni samo tam, kjer ni gita ali alternative. Drugace je to ena izmed najbolj neuporabnih zadev kar je mozno. Git je narejen za to. Zaradi mene lahko poleg commit messaga v git daste se link do svojega bug trackerja pa bo veliko bolje kot tole. A sploh kdaj generirate dokumentacijo in jo posljete zunanjim strankam? A so navduseni, ko to prebirajo?
Cemu se vedno na vrhu funkcije definirate parametre? Ok so jeziki kjer to moras naredit ampak nisem preprican, da tale spada mednje. Definiras cim blizje ko potrebujes. S tem povecas preglednost in zmanjsas moznost napak.

Invictus ::

Ni VC? Seriosly?????

Danes razvijati brez versioning controla ?!?!?!?

Commit msgji pa niso za v kodo...

Tud komentarji v stilu

// grem iskat podatke v tabelo
TableRead(...


So čisto odveč...
"Life is hard; it's even harder when you're stupid."

http://goo.gl/2YuS2x

Zgodovina sprememb…

  • spremenil: Invictus ()

showsover ::

Ne tega jemat kot nek posrečen primer, če gre (res) za class, je že ime polja i neustrezno, lastnosti morda res ni, vse prikazane metode so tipa void itd. To je bilo zagotovo dano samo za res osnovno ilustracijo...

WizzardOfOZ ::

Če pa noben ne bere kaj je spodaj in naprej od tega zapisano.

C# kodo sem dal samo za primer, da se vidi kaj komentiram. Poanta je da večino programov napišem v assemblerju, cobolu in rexxu. Tiste kode pa večina tukaj niti ne razume.
Milčinski je napisal butalce kot prispodobo in ne kot priročnik!!!
Svuda u svijetu ima budala ali je izgleda kod nas centrala!!!

Zgodovina sprememb…

techfreak :) ::

Ne glede na jezik, brez VC nimas popolnoma nobenega nadzora, kdaj in od kje je zadeva prisla. Se pa strinjam, da je vsaj za assembler (cobol-a in rexx-a ne poznam) potrebno precej bolj komentirati, ker ni tako razumljiva koda.

WizzardOfOZ ::

Ja je velika razlika med višjenivojskimi jeziki in orodji ter med terminalnom in notepadom. Tudi v cobolu je podobno. Imaš pa prvih 8 mest rezerviranih, da lahko datum vpišeš, kdaj je bila sprememba. Pa cobol ima VC, ampak na zelo nizkem osnovnem nivoju. Star zapis shrani in potem lahko primerjaš, ampak je komplicirano. Zato je lažje napisat, kdo je zadni popravljal in datum popravka zraven vrstice, katera se je popravljala.

Zato sem uporabil pa C# kodo, ker je bolj pregledno. Ne da tako delam v C#.
Milčinski je napisal butalce kot prispodobo in ne kot priročnik!!!
Svuda u svijetu ima budala ali je izgleda kod nas centrala!!!

Zgodovina sprememb…

darkolord ::

FTad je izjavil:

Pa se v tem primeru splača pisati posebej class?

1. Se bodo tiste metode uporabljale tudi kje drugje?
2. Je za pričakovati, da se lahko znotraj tega classa poveča število metod, da se upraviči pisanje posebej classa?
3. Bi se splačalo pisati posebej class, če bi imeli samo 2 metodi in niti ne veste, če bi ju lahko uporabili kasneje v kakem drugem programu?
3.a. ali šele kasneje, ko pridete do take situacije, iz teh funkcij napisete class, vstavite metode in potem zamenjate funkcije s klici teh metod?

To sprašujem čisto resno, saj me zanima, kako oz na podlagi kakšnih izkušenj se odločate iz takih situacij pisati posebej class.
Število metod (ali propertijev) v bistvu sploh ni pomembno. Včasih ima class lahko samo eno metodo, včasih je lahko celo prazen.

Tudi kolikokrat se uporablja, samo po sebi ni kriterij.

Kriteriji so bolj:
- za kaj se uporablja
- kako se uporablja
- preglednost
- dokumentacija
- testiranje
- ...

Zgodovina sprememb…

  • spremenilo: darkolord ()

error7891 ::

WizzardOfOZ je izjavil:

Pa cobol ima VC, ampak na zelo nizkem osnovnem nivoju.


Kaj te zavira pred uporabo npr. GIT-a za verzioniranje Cobol kode?

WizzardOfOZ ::

Mainframe je ovira, pa njegov file system in povezave. Dela se namreč direktno preko terminala v VMS (virtual memory system).

Milčinski je napisal butalce kot prispodobo in ne kot priročnik!!!
Svuda u svijetu ima budala ali je izgleda kod nas centrala!!!

Zgodovina sprememb…

shadeX ::

Včasih ima class lahko samo eno metodo, včasih je lahko celo prazen.


Lahko poveš v katerm primeru je prazen class "upravičen"?

Ni to code smell?

SloKin ::

darkolord je izjavil:

FTad je izjavil:

Pa se v tem primeru splača pisati posebej class?

1. Se bodo tiste metode uporabljale tudi kje drugje?
2. Je za pričakovati, da se lahko znotraj tega classa poveča število metod, da se upraviči pisanje posebej classa?
3. Bi se splačalo pisati posebej class, če bi imeli samo 2 metodi in niti ne veste, če bi ju lahko uporabili kasneje v kakem drugem programu?
3.a. ali šele kasneje, ko pridete do take situacije, iz teh funkcij napisete class, vstavite metode in potem zamenjate funkcije s klici teh metod?

To sprašujem čisto resno, saj me zanima, kako oz na podlagi kakšnih izkušenj se odločate iz takih situacij pisati posebej class.
Število metod (ali propertijev) v bistvu sploh ni pomembno. Včasih ima class lahko samo eno metodo, včasih je lahko celo prazen.

Tudi kolikokrat se uporablja, samo po sebi ni kriterij.

Kriteriji so bolj:
- za kaj se uporablja
- kako se uporablja
- preglednost
- dokumentacija
- testiranje
- ...

Spet. So jeziki, kjer je uporaba classa nujna kot je java. Nekje jih ni kot v c. Nekje je mesanica kot v c++. Zakaj bi v c++ vse tiscal v class mi ni jasno. To je v celoti odvisno od uporabe...

darkolord ::

Ja, seveda, to je samoumevno.

shadeX je izjavil:

Lahko poveš v katerm primeru je prazen class "upravičen"?

Ni to code smell?

Najbolj klasičen primer:
public class SpecificException : System.Exception {}

Tehnično seveda ni popolnoma prazen, ampak glede kode pa je.

Zgodovina sprememb…

  • spremenilo: darkolord ()

youPlonker ::

Vcasih preprosto in kmecko, komajda DRY - takrat ima vsakdo nekaj za pripomniti na pull requestih, vcasih pa fancy z jakimi naprednimi pristopi, takrat vsi samo slepo potrdijo pull request ocarani od njene lepote.

Uganite, kaj dela 100x bolje in mi pozre manj casa v prihodnje...

SloKin ::

youPlonker je izjavil:

Vcasih preprosto in kmecko, komajda DRY - takrat ima vsakdo nekaj za pripomniti na pull requestih, vcasih pa fancy z jakimi naprednimi pristopi, takrat vsi samo slepo potrdijo pull request ocarani od njene lepote.

Uganite, kaj dela 100x bolje in mi pozre manj casa v prihodnje...

Ni treba po nepotrebnem komplicirat. Ampak delitev na funkcije so osnova. Sem napisal kaj vse je prednost. Kuall se seveda ne strinja zato pa v kodi ponavlja nepotrebne stvari. Ce bi v svojem primeru vrgel nepotrebne stvari ven, bi dobil kratko funkcijo. On pa tega noce, ker zeli svoje bloke.

kuall ::

Jaz podvajam kodo? Nekaj novega sem se pa naučil od vas. :))

Smurf ::

SloKin je izjavil:


Ni treba po nepotrebnem komplicirat. Ampak delitev na funkcije so osnova. Sem napisal kaj vse je prednost. Kuall se seveda ne strinja zato pa v kodi ponavlja nepotrebne stvari. Ce bi v svojem primeru vrgel nepotrebne stvari ven, bi dobil kratko funkcijo. On pa tega noce, ker zeli svoje bloke.

Tako je, in ko ti enkrat pridejo te stvari pod kozo ne porabis za njih nic vec casa. V resnici cas na dolgi rok prisparas, ker lazje handlas kodo v taki obliki.

SloKin ::

kuall je izjavil:

Jaz podvajam kodo? Nekaj novega sem se pa naučil od vas. :))

Ne. Po nepotrebnem podvajas izvajanje kode.

BigWhale ::

WizzardOfOZ je izjavil:

Mainframe je ovira, pa njegov file system in povezave. Dela se namreč direktno preko terminala v VMS (virtual memory system).


Ej, ne vem, no. Jest sem delal port Linuxa na S/390 in AS/400 pa smo mel vse pod version controlom. To, da se dela 'direktno prek terminala v VMS' pomeni samo to, da imate resnicno messed up razvojni postopek.

WizzardOfOZ ::

Linux je nekaj drugega kot ZOS. Če delaš na linux particijah na mainframeu imaš ogromno več možnosti.
Delaš pa lahko tudi v IDE, ampak je hitreje direkt v konzoli. Parkrat hitreje. Vsaj zame.
Milčinski je napisal butalce kot prispodobo in ne kot priročnik!!!
Svuda u svijetu ima budala ali je izgleda kod nas centrala!!!

Zgodovina sprememb…

kuall ::

Smurf je izjavil:

ker lazje handlas kodo v taki obliki.

Vpraš sodelavca od OPa, kako lažje handla kodo v taki obliki.

SloKin je izjavil:

Ne. Po nepotrebnem podvajas izvajanje kode.

Se kar bojim vprašat, kaj naj bi to pomenilo?

Zgodovina sprememb…

  • spremenilo: kuall ()

FTad ::

SloKin je izjavil:


Cemu se vedno na vrhu funkcije definirate parametre? Ok so jeziki kjer to moras naredit ampak nisem preprican, da tale spada mednje. Definiras cim blizje ko potrebujes. S tem povecas preglednost in zmanjsas moznost napak.


Se popolnoma strinjam in tudi sam programiram na ta način.

kuall ::

Zmanjšaš možnost kakšnih napak? Primer? Oba načina sta ok. Eden je bolj komot kot drugi.

SloKin je izjavil:

Ce bi v svojem primeru vrgel nepotrebne stvari ven, bi dobil kratko funkcijo. On pa tega noce, ker zeli svoje bloke.


Dej mi tvoj gitgub account, da ti pokažem primer, kako se da tvoje špageti funkcije polepšat z logičnim segmentiranjem. Ali boš rekel, da imaš samo funkcije s 5 vrsticami?

Zgodovina sprememb…

  • spremenilo: kuall ()

BigWhale ::

WizzardOfOZ je izjavil:

Linux je nekaj drugega kot ZOS. Če delaš na linux particijah na mainframeu imaš ogromno več možnosti.
Delaš pa lahko tudi v IDE, ampak je hitreje direkt v konzoli. Parkrat hitreje. Vsaj zame.


Narobe si me razumel. :) Velik stvari je blo treba narest tud na samih VSMjih in napisat en kup toolinga, pa smo vseeno imel proper version control. Delanje direkt v konzoli in izgovor, da gre tko velik hitrejs je sam izgovor za narobe postavljeno produkcijo. Na zalost.

kuall je izjavil:

Dej mi tvoj gitgub account, da ti pokažem primer, kako se da tvoje špageti funkcije polepšat z logičnim segmentiranjem. Ali boš rekel, da imaš samo funkcije s 5 vrsticami?


Tud tvoj github account se cakamo... :>

Zgodovina sprememb…

  • spremenil: BigWhale ()

korenje3 ::

Classi so najbolj časovno potratna zadeva. Sam če so dobro spisani lahko prihranijo veliko časa kasneje. So tudi uporabni pri multi-user programming, kjer lahko več ljudi dela isti program in class uporabiš kot modul.
Mislim pa da tudi ni druge pametne rešitve pri shranjevanju podatkov v spomin, kjer je hitra dostopnost podatkov pomembna.
i9-12900k; 32GB DDR5-6000 CL36; Nvidia RTX 3080 ti;
Gigabyte Aorus z690 master; Be Quiet Dark Power 12 1000W

Zgodovina sprememb…

  • spremenil: korenje3 ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Python najbolj vroč programski jezik (strani: 1 2 3 )

Oddelek: Novice / Ostala programska oprema
12229146 (23500) BigWhale
»

Unit testing - se poslužujete?

Oddelek: Programiranje
335182 (3332) krneki0001
»

Applov nov programski jezik Swift (strani: 1 2 )

Oddelek: Novice / Apple iPhone/iPad/iPod
7234352 (28913) Kocka
»

Incident Knight Capital in slaba programska oprema, ki poganja svet

Oddelek: Novice / Znanost in tehnologija
4715448 (12355) Poldi112
»

Odkrit resen hrošč v PHP 5.3.7 (strani: 1 2 )

Oddelek: Novice / Varnost
5016998 (14765) Spura

Več podobnih tem