Espageti kode

From Wikipedia, the free encyclopedia

Remove ads

Espageti kodea informatikan erabiltzen den termino gutxiesgarri bat da, kontrol-egitura konplexu eta ulertezinak dituzten programak deskribatzeko. Iturburu kode mota honek izen hori darama espageti plater baten antza duelako; hau da, hari korapilatsu eta nahasi multzo baten itxura.

Tradizionalki, programazio estilo hau oinarrizko eta zaharkitutako hizkuntzekin lotu izan da, fluxua oso oinarrizko kontrol-sententzia bidez kontrolatzen baitzen; hala nola, goto eta lerro-zenbakiak erabiliz.

Programazio-lengoaia berrietan espageti kodea –egitura eskasarekin garatzen den kodea– hainbat faktoreren ondorioz gerta daiteke; hala nola, programazio-estiloaren arau faltarengatik, eta gaitasun edo esperientzia nahikorik ez duten programatzaileen ondorioz.[1]

Espageti kode honen presentziak sistema baten ulergarritasuna nabarmen murriztu dezake.[2]

Remove ads

Programazio-lengoaien bilakaera

60ko hamarkadan, programa baten fluxua zehazteko modu bakarra kateatutako IF sententzia eta Boolear aldagaien bidezkoa zen. Geroago, funtzioak idazteko aukera sortu zen, orokorretik zehatzetarakoa. Gaur egun, objektuetara bideratutako programazioarekin, modularitatea, abstrakzioa, kapsulatzea, desakoplamendua, herentzia eta antzeko kontzeptuak daude. Gaur egungo tresna eta kontzeptu guztiekin, kode mota hori idaztea saihesteko baliabide nahikoa dago.

Remove ads

Berregituraketa

Ez da onargarria espageti kodea idaztea hastapenetan ere, horrek programa ulertzea zailtzen baitu. Funtzio edo programa bat garatzeko prozesuan zehar ikusten bada kodearen konplexutasuna hazten ari dela eta kodea espageti bihurtzen ari dela, une egokia da dagoeneko osatutako zatia berrikusteko; hau da, berregituraketa egiteko. Garapenean zehar aldizkako garbitasuna egiteak konplexutasuna kontrolpean mantentzea ahalbidetzen du eta nabarmen handitzen ditu programatzailearen produktibitatea eta programaren ulermena.

Remove ads

Espageti kodetik egituratutako programaziora

Kazetaritzaren oinarizko arauekin konparazioa egin daiteke albiste bat idazteko moduari dagokionez. Arauek diote albistearen izenburuak informazio garrantzitsuena azaldu behar duela, ondoren lehen paragrafoan xehetasunak eman eta gero ataletan banatuz garatu behar dela. Era berean, programaren main atalean funtziorik orokorrenak agertu behar dira, eta bakoitzak funtzio espezifikoagoak deitu behar ditu ondoren.

"Berregituratu–metodoa erauzi" funtzioarekin automatikoki lor daiteke espageti kodeko if adarren bakoitza funtzio bat bihurtzea eta, ondorioz, ulergarritasuna nabarmen hobetuko da.

Egituratutako programaziotik objektuetara bideratutako programaziora

Behin funtzioak argi eta garbi ikusgarri daudenean, posible da ohartzea zeintzuk osatzen duten erantzukizun komun bat eta ez dauden gainerako kodearekin nahasita. Hori dela eta, funtzio horiek objektu desberdinetan bana daitezke, eta objektu horiek jada izango dituzte metodoak eta propietateak (pribatuak izan daitezkeenak eta, beraz, kodearen gainontzeko zatietatik ikusiezinak).

Espageti kodeak objektuetara bideraturako programazio-estiloan idazten den ereduaren aurkako eredu bat ere deskriba dezake, adibidez, metodoak luzeegia eta nahasia dituzten klaseak sortuz edo polimorfismoa bezalako objektuei dagozkien kontzeptuak alde batera utziz.[3]

Remove ads

Historia

Ez dago argi noiz iritsi zen espageti kode esaldia ohiko erabilerara; hala ere, 1977an hainbat erreferentzia agertu ziren, besteak beste, Guy Steeleren Macaroni is Better Than Spaghetti liburua.[4] 1978ko A primer on disciplined programming using PL/I, PL/CS and PL/CT liburuan, Richard Conway-k "espageti plateren egitura logiko garbi bera duten" programak deskribatu zituen esaldi batean.[5] David Griesekin batera idatzi zuen An Introduction to Programming liburuan errepikatu zuen 1979an.[6] 1988ko A spiral model of software development and enhancement paperean, terminoa kode eta konponketa ereduaren praktika zaharra deskribatzeko erabili zen, plangintzarik ez zuena eta azkenean ur-jauziaren eredua garatzera eraman zuena.[7] 1979ko Structured programming for the COBOL programmer liburuan, Paul Noll egileak spaghetti code eta arratoi habiak esaldiak sinonimo gisa erabilti zituen gaizki egituratutako iturburu kodeak deskribatzeko.[8]

Richard Hamming-ek bere hitzaldietan deskribatu zuen terminoaren etimologia kode bitarretako programazio goiztiarraren testuinguruan:[9]

 Akats bat konpontzerakoan instrukzio batzuk gehitu behar bazenitu, aurreko instrukzioa hartu eta hutsik zegoen espazioren batera salto bat gehitzen zenuen. Espazio horretan, aurretik idatzitakoa berriro idazten zenuen, beharrezko instrukzioak gehitzen zenituen, eta azkenik, programaren atal nagusira itzultzeko beste salto bat gehitzen zenuen. Ondorioz, programak saltoz beteriko egitura hartzen zuen, kontrola toki ezohikoetara eramanez, eta programaren egiturak espageti lata baten itxura hartzen zuen. Baina zergatik ez gehitu instrukzio berriak zuzenean programaren fluxuan? Horrek esan nahiko luke programa osoa berrikusi eta mugitutako edozein instrukziori egiten zaizkion erreferentzia guztiak egokitu beharko zenituzkeela! Hau guztia saihesteko edozein trikimailu erabiliko zen, hori bai ezetz!
Remove ads

Adibideak

Hona hemen BASIC legoaian espageti kode gisa ulertuko litzatekeen adibide arrunt bat. Programak 1etik 100era bitarteko zenbakiak pantailan inprimatzen ditu, bakoitzaren berreketa barne. Atzera-eskaerarik ez da erabiltzen kodeak egiten dituen ekintza desberdinak bereizteko, eta programaren GOTO aginduak lerro zenbakien menpe egotea eragiten du. Batetik besterako jauziek exekuzioaren fluxua aurreikustea zailtzen du. Espageti kode estiloan eginiko benetako kodeak askoz konplexuagoak izan daitezke eta programaren mantentze kostuak nabarmen handitu ditzakete.

1 i=0
2 i=i+1
3 PRINT i;"Berreketa:";i*i
4 IF i>=100 THEN GOTO 6
5 GOTO 2
6 PRINT "Programa amaituta."
7 END

Hona hemen kode bera egituratutako programazio estiloan idatzita:

1 FOR i=1 TO 100
2     PRINT i;"Berreketa:";i*i
3 NEXT i
4 PRINT "Programa amaituta."
5 END

Ondorengo adibidean programak batetik bestera salto egiten du, baina salto hori formala da eta errazago aurreikusten da, for loopek eta Subroutine fluxu kontrola eskaintzen dutelako, aldiz goto aginduak fluxu kontrola arbitrarioa sustatzen du. Adibide hau txikia den arren, benetako programek kode lerro asko dituzte eta, ondorioz, mantentzea zaila da espageti kode estiloan idazten direnean.

Hona hemen GOTO aginduak barne hartzen dituen beste espageti kode adibide bat.

  INPUT "Zenbat zenbaki ordenatu behar dira?"; T
  DIM n(T)
  FOR i = 1 TO T
    PRINT "ZENBAKIA:"; i
    INPUT n(i)
  NEXT i
  'Kalkuluak:
  C = T
E180:
  C = INT(C / 2)
  IF C = 0 THEN GOTO C330
  D = T - C
  E = 1
I220:
  f = E
F230:
  g = f + C
  IF n(f) > n(g) THEN SWAP n(f), n(g)
  f = f - C
  IF f > 0 THEN GOTO F230
  E = E + 1
  IF E > D THEN GOTO E180
  GOTO I220
C330:
  PRINT "Ordenatutako zerrenda honakoa da:"
  FOR i = 1 TO T
    PRINT n(i)
  NEXT i
Remove ads

Beste kode batzuk

Ravioli kodea

Ravioli kodeak ondo egituratuta dauden eta bereizita erraz ulergarriak diren klaseez osatuta egon arren, osotasunean ulertzea oso konplexua den kodeari egiten dio erreferentzia.

Ravioli kodea kode zati txiki gehiegitan berregituratzean oinarritzen da eta horrek zati horiek jarraitzea zaila edo ia ezinezkoa bihurtzen du. Kasu hau objektuetara bideratutako programazioan ere gertatzen da, baina kodearen jatorria ez dago soilik funtzioen edo prozeduren artean barreiatuta, baita klase eta paketeen artean ere. Horrek kodearen trazabilitatea nabarmen zailtzen du.

Lasagna kodea

Kode mota honek geruzak hain konplexu eta elkarren mendeko bihurtzen ditu, non geruza batean egindako aldaketa batek beste batzuetan aldaketak egitea ezinbestekoa egiten duen.

Pizza kodea

Pizza kodeak arkitektura oso laua duen kodeari egiten dio erreferentzia.

Hotdog kodea

Hotdog kodea oso konplexua izatera irits daitekeen kodea da, eta horren ondorioz akats txiki batek programaren funtzionamendu osoa eten dezake.

Remove ads

Erreferentziak

Ikus, gainera

Kanpo estekak

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads