Spagettikód

(Spagetti kód szócikkből átirányítva)
Ez a közzétett változat, ellenőrizve: 2023. december 15.

A számítógép-programozásban a spagettikód a strukturálatlan és nehezen karbantartható forráskód pejoratív megnevezése. Többféle oka lehet, a programozó tapasztalatlansága, a gyorsan változó követelmények, vagy a programozási stílusra vonatkozó szabályok hiánya.[1]

Spagetti, mint a strukturálatlan kód illusztrációja

Jelentése

szerkesztés

Habár sokszor az egyszerűen csak nehezen érthető, követhető kódot is spagettikódnak nevezik, eredetileg a strukturált programszerkezetek helyett a GOTO utasítás túlzott használatát nevezik így, mivel a program összegabalyodott, emiatt karbantarthatatlan.[2] A kód szerkezete bonyolult és szövevényes, mint egy tál spagetti.[3] A United States National Bureau of Standards egy 1980-as publikációjában a spaghetti program kifejezést használták a régebbi, szétszórt és töredezett szerkezetű programokra.[4]

Objektumorientált környezetben a nem objektumorientált, strukturált kód is lehet spagettikód, hosszú és nehezen érthető metódusokkal, vagy visszaél az olyan objektumorientált lehetőségekkel, mint a polimorfizmus, amikor az aggregáció célravezetőbb lenne. A teljes program megértését ez is megnehezíti.

Története

szerkesztés

A kifejezés eredete nem tisztázott. 1977-ben már használták, köztük Steele cikke Macaroni is Better Than Spaghetti címmel a Proceedings of the 1977 szimpózium keretében, melynek témája a programnyelvek és a mesterséges intelligencia volt.[5] Richard Conway 1978-ban megjelent könyve, A primer on disciplined programming using PL/I, PL/CS, and PL/CT címmel. Ebben olyan programokat jellemzett így, amelyek logikai szerkezete ugyanolyan átlátható, mint egy tál spagetti. Ez a mondat szerepel David Gries-szel közös könyvében, ami 1979-ben jelent meg An Introduction to Programming címmel.[6] Az A spiral model of software development and enhancement lap 1988-ban a kódolj és javíts korábbi gyakorlatát bírálta, azzal a tanulsággal, hogy szükség van tervezésre, és helyette a vízesésmodellt javasolta.[7] 1979-ben Paul Noll Structured programming for the COBOL programmer című könyvében a spagettikód és a patkányfészek szinonímákat alkalmazta a gyengén strukturált kódra.[8]

Az Ada – Europe '93 konferencián az Adát azzal dicsérték, hogy kivételterjedési mechanizmusa rákényszeríti a programozókat arra, hogy érthető kódot írjanak.[9]

1981-ben a The Michigan Technic BASICally speaking...FORTRAN bytes!! című cikkében rosszallását fejezte ki a FORTRAN iránt, mivel teljes egészében spagettikódból áll.[10] Habár ez a cikk úgy írta, hogy ez is bizonyítja, hogy olaszok működtek közre az IBM alapításánál, olasz matematikusok, Corrado Böhm és Giuseppe Jacopini már 1966-ban megjelentették cikküket, amiben bizonyították a strukturált programozás tételét. Edsger Dijkstra idézte ezt a cikket, a Kártékonynak tekinthető GO TO utasítás címmel megjelent nyílt levelében.[11]

Egyszerű példa a spagettikódra BASIC nyelven. A kódban elhelyezett GOTO utasítás miatt a kód nehezen követhető.

1 i=0;
2 i=i+1;
3 PRINT i; "squared=";i*i;
4 IF i>=100 THEN GOTO 6;
5 GOTO 2;
6 PRINT "Program Completed.";
7 END

A fenti kód strukturált változatából hiányzik a GOTO utasítás, a kód szerkezete könnyen átlátható és értelmezhető.

1 FOR i=1 TO 100
2     PRINT i;"squared=";i*i
3 NEXT i
4 PRINT "Program Completed."
5 END

Kapcsolódó fogalmak

szerkesztés
  • Ravioli kód az objektumorientált programozásban azt jelenti, hogy ugyan az osztályok jól strukturáltak, de nehéz követni kapcsolataikat.
  • Lasagna kód arra utal, hogy a kód rétegeinek kapcsolata olyan összetett, hogy az egyik réteg változásai miatt a többi rétegen is változtatni kell.
  1. (2004. november 5.) „Straightening spaghetti-code with refactoring?”. Software Engineering Research and Practice, 846-852. o. [2018. március 5-i dátummal az eredetiből archiválva]. (Hozzáférés: 2018. március 5.) 
  2. (2005. november 5.) „Pronouns and procedural meaning: The relevance of spaghetti code and paranoid delusion”. Oxford University Working Papers in Linguistics, Philology and Phonetics 10, 187-210. o. [2018. március 6-i dátummal az eredetiből archiválva]. (Hozzáférés: 2018. március 5.) 
  3. Chapter 6 - Iteration, Java Concepts for AP Computer Science, 5th ed. [i.e. 2nd ed.]. (english nyelven), Hoboken, NJ: J. Wiley & Sons, 235–236. o. (2008. november 5.). ISBN 978-0-470-18160-7. Hozzáférés ideje: 2017. január 2. 
  4. United States National Bureau of Standards. ASTM special technical publication. United States Government Printing Office (1980) 
  5. Conway, Richard. A primer on disciplined programming using PL/I, PL/CS, and PL/CT. Winthrop Publishers (1978). ISBN 0-87626-712-6 
  6. An Introduction to Programming, 3rd, Little, Brown (1979). ISBN 0-316-15414-8 
  7. Boehm, Barry W. (1988. május 1.). „A spiral model of software development and enhancement”. IEEE Computer 21 (2), 61–72. o, Kiadó: IEEE. DOI:10.1109/2.59. 
  8. Noll, Paul. Structured programming for the COBOL programmer: design, documentation, coding, testing. M. Murach & Associates (1977) 
  9. Schwille, Jürgen (1993). „Use and abuse of exceptions — 12 guidelines for proper exception handling”. Ada – Europe '93 (Proceedings) Lecture Notes in Computer Science 688: 142–152, Springer Berlin Heidelberg. doi:10.1007/3-540-56802-6_12. 
  10. MTSBS (March–April 1981). „BASICally speaking...FORTRAN bytes!!”. The Michigan Technic 99 (4), Kiadó: College of Engineering, University of Michigan. 
  11. Bohm, Corrado (1966. május 1.). „Flow Diagrams, Turing Machines and Languages with Only Two Formation Rules”. Communications of the ACM 9 (5), 366–371. o. DOI:10.1145/355592.365646. 

Fordítás

szerkesztés

Ez a szócikk részben vagy egészben a Spaghetti code című angol Wikipédia-szócikk fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.