Spagettikód
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]
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]
Példa
[szerkesztés]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.
Jegyzetek
[szerkesztés]- ↑ (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.)
- ↑ (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.)
- ↑ 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.
- ↑ United States National Bureau of Standards. ASTM special technical publication. United States Government Printing Office (1980)
- ↑ Conway, Richard. A primer on disciplined programming using PL/I, PL/CS, and PL/CT. Winthrop Publishers (1978). ISBN 0-87626-712-6
- ↑ An Introduction to Programming, 3rd, Little, Brown (1979). ISBN 0-316-15414-8
- ↑ 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.
- ↑ Noll, Paul. Structured programming for the COBOL programmer: design, documentation, coding, testing. M. Murach & Associates (1977)
- ↑ 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.
- ↑ MTSBS (March–April 1981). „BASICally speaking...FORTRAN bytes!!”. The Michigan Technic 99 (4), Kiadó: College of Engineering, University of Michigan.
- ↑ 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.
Források
[szerkesztés]- Go To Statement Considered Harmful. The classic repudiation of spaghetti code by Edsger Dijkstra
- We don't know where to GOTO if we don't know where we've COME FROM by R. Lawrence Clark from DATAMATION, December, 1973
- Refactoring Java spaghetti code into Java bento code separating out a bowl full of code from one class into seven classes
- Objects and Frameworks – Taking a Step Back by Brian Rinaldi
- Programming Pasta - Spaghetti, Lasagna, Ravioli and Macaroni Code
- Pasta Theory of Programming Archiválva 2018. június 12-i dátummal a Wayback Machine-ben
- Spaghetti Code: Detangling Life and Work with Programmer Wisdom (English Edition)[halott link]
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.