W niniejszym materiale przedstawiam Ci całkowicie już archaiczną konstrukcję, która była regularnie stosowana w czasach języka FORTRAN 😮. Zanim pojawiły się bardziej znane hasła do obsługi pętli takie jak "break" i "continue", "królowała" instrukcja skoku zwana w języku C jako "goto" ✈️. Tak się składa, że występuje "w palecie" słów kluczowych po dziś dzień 🔔! Zapoznaj się z częścią historii programowania w latach .50 XX wieku i zobacz na własne oczy jak instrukcja skoku wygląda "od kuchni" 🔍👀!

"GOTO" W JĘZYKU C. "NALECIAŁOŚĆ" Z LAT PIĘĆDZIESIĄTYCH

Najpierw opiszę Ci szybko historię, a potem przejdziemy do kodu źródłowego 😊.

PRZEJDŹMY DO HISTORII (NIE DOSŁOWNIE)

Zanim pojawiło się w informatyce programowanie strukturalne, w czasach języków FORTRAN, COBOL i tym podobnych programiści używali instrukcji skoku do wykonywania wielu iteracji. Do czasu, aż znany informatyk, Edsger Dijkstra, opracował w 1968 roku publikację pt: "Go To Statement Considered Harmful". Dijkstra wyrażał się krytycznie wobec instrukcji skoku, argumentując że "goto" powoduje bałagan w kodzie (tzw. "spaghetti code" 😄) i dużo lepiej przesiąść się na paradygmat strukturalny (podział kodu na procedury i zamiana instrukcji skoku na pętle ℹ️) 🔥.

To był pierwszy krok rozważań przez programistów do porzucenia instrukcji "goto" na rzecz pętli znanych nam współcześnie 😲. Konkretnie, to 👇:

  1. "for",
  2. "while",
  3. "do while".

Osobiście nie radzę się przesiadać na "goto" ✋. Instrukcja skoku nie jest już dziś praktykowana z uwagi na swoje lata (przypominam, że dotykamy lat .50 XX wieku 😉), a piszę o tym jedynie w ramach ciekawostki ℹ️.

PRZYKŁAD KODU ŹRÓDŁOWEGO

Teraz prezentacja działania w kodzie! Instrukcja "goto" w języku C powoduje "przeniesienie się" do innego miejsca w kodzie tam, gdzie znajduje się postawiona wcześniej tzw. "etykieta" ℹ️. Możesz to interpretować jako postawiony "znak" w kodzie w postaci nazwy, aczkolwiek nie jest to łańcuch znaków rozumiany jako ciąg umieszczony w cudzysłowach (bo tu wyjątkowo nie korzystamy z cudzysłowów!) ⚠️.

Instrukcja skoku od strony działania, nie różni się niczym od pętli, aczkolwiek jak przyjrzymy się składni, to tu różnice widać natychmiastowo 🚨! Zerknij na poniższy przykład 👇:

#include <stdio.h>

int main(void)
{
	int i = 0;

	iterate:

	printf("i = %d\n", i++);

	if(i < 10)
	{
		goto iterate;
	}

	return 0;
}

Jak zwykle, dyrektywa dołączająca u góry i funkcja uruchomieniowa "main" z instrukcjami 🙂. Przyjrzyjmy się dwóm szczególnym elementom 🔍!

ETYKIETA

Wewnątrz funkcji "main", najbardziej nietypowym hasłem jakie się pojawia, jest ten zapis:

iterate:

To jest właśnie etykieta 💣! Zobacz, że to nie jest łańcuch znaków, bo nie osadzamy wyrazu wewnątrz cudzysłowów ⚠️. To nie zostanie potraktowane jak błąd kompilacji - taki zapis jest jak najbardziej poprawny ✅. Korzystamy za to z dwukropka jaki musi się znaleźć na samym końcu 💥!

Nazwa etykiety może być dowolna 👍. Kieruje się tymi samymi zasadami, co nazwa zmiennej, natomiast co ciekawe, tutaj możemy wstawić polskie znaki 😁!

"SKOK" DO WSKAZANEJ ETYKIETY

Po funkcji "printf" mamy instrukcję warunkową, w której sprawdzamy aktualną wartość licznika (licznik jest inkrementowany wewnątrz wywołania "printf" ⚠️). Jeżeli warunek zostaje spełniony, wtedy program trafia na instrukcję skoku 🔥! "goto" spowoduje dosłowny "przeskok" do miejsca, w którym znajduje się podana przez nas etykieta. Jak się domyślasz, musi być podana bezbłędnie, znak po znaku 😉.

Ten zapis 👇:

goto iterate;

oznacza: "przeskocz do wiersza w kodzie zawierającego wskazaną etykietę". Tak będzie to robić w kółko dopóty, dopóki licznik nie osiągnie wskazanej wartości, czyli wykona dokładnie to, co robi pętla "for", "while" bądź "do while", tylko w bardziej uporządkowanej formie 🧩. Tutaj, ujmując to zabawnie, mamy taką "teleportację" 😄.

Ciekawostka: starsze języki obsługujące instrukcję "goto" ponoć nie posiadały możliwości wstawiania nazw etykiet 😳. Trzeba było wówczas identyfikować wszystko numerami, czyli liczbami całkowitymi 😬.

"GOTO" VS. "FOR"

Poniżej zostawiam dla porównania kod źródłowy programu, który daje taki sam efekt, jak kod u góry, lecz tutaj, dla porównania, korzystam z pętli "for" 👇:

#include <stdio.h>

int main(void)
{
	for (int i = 0; i < 10; ++i)
	{
		printf("i = %d\n", i);
	}

	return 0;
}

Widać od razu jak dużo prostszy kod, a intencja taka sama 😄!

Słowo kluczowe "goto" w języku C

Instrukcja skoku znana pod hasłem "goto" w języku C, powoduje dosłowny "przeskok" do wiersza kodu, na którym znajduje się podana etykieta.


Oto fragment historii przestarzałej instrukcji skoku. Powtarzam: nie korzystaj z tego ⛔! Dzisiaj masz wygodniejsze sposoby do wielokrotnego wykonywania tych samych instrukcji 😊.

PODOBNE ARTYKUŁY