BananWszyscy Kwiecień 14, 2021 Udostępnij Kwiecień 14, 2021 (edytowany) Nie, nie uważam, że enumy są tylko dla switchy, ale są warte wspomnienia przy switchach szczególnie podczas nauki przy krótkich programikach edit. ta uwaga była ze względu na pytania, które dostawałem od młodzieży, która zaczynała cokolwiek klepać i widzieli, że w switchach potrafi być od taki tekst... Edytowano Kwiecień 14, 2021 przez BananWszyscy
ethanak Kwiecień 14, 2021 Autor tematu Udostępnij Kwiecień 14, 2021 To o czym jeszcze trzeba by było wspomnieć? I co to miałoby wspólnego z tematem? Artykuł miał na celu dokładniejsze wyjaśnienie jak działają instrukcje sterujące, a nie omawianie wszelkich możliwych postaci zapisu intów, a już na pewno nie ma zastąpić kursu Arduino. Być może powinienem na początku zaznaczyć że trzeba to traktować jako dodatek do tego właśnie kursu?
BananWszyscy Kwiecień 14, 2021 Udostępnij Kwiecień 14, 2021 dawno napisałem eot, po co drążysz... /do kasacji
matiut2 Maj 9, 2021 Udostępnij Maj 9, 2021 A jednak goto czasami się przydaje, np. for(i = 0; i < n; i++) { //... for(j = 0; j < m; j++) { while( /*warunek*/ ) { if( /*błąd czy jakis inny powód przerwania wszystkich pętli*/ ) goto wyjscie //... } //... } } wyjscie: printf("o nie, trzeba wyjsc") Wtedy break nie wystarczy, bo masz sporo zagnieżdżonych pętli. Da się to oczywiście rozwiązać dodając jakąś flagę wyjścia sprawdzana w każdej pętli, ale trzeba wtedy dopisywać po każdej pętli sprawdzanie tego warunku. Kod robi się chyba trochę mniej czytelny, niż z wykorzystaniem goto. Widziałem jeszcze na MSDN propozycje wykorzystania goto do obsługi błędów. Kiedy masz sporo wywołań funkcji, które mogą zwrócić błąd, możesz sprawdzać czy się jakiś błąd nie pojawił, i jeśli by się pojawił to skakać w jedno miejsce, gdzie masz cały kod odpowiedzialny za usunięcie zmiennych alokowanych dynamicznie itp. Ogólnie gdzie sprzątasz po sobie. I wtedy w jednym miejscu masz ładnie wszystko porządkowane. A jak by chcieć to zrobić bez goto skończył byś z masą zagnieżdżonych ifów, albo kilkoma miejscami w kodzie, w których sprzątasz po swoim kodzie.
H1M4W4R1 Maj 9, 2021 Udostępnij Maj 9, 2021 15 minut temu, matiut2 napisał: A jednak goto czasami się przydaje, np. for(i = 0; i < n; i++) { //... for(j = 0; j < m; j++) { while( /*warunek*/ ) { if( /*błąd czy jakis inny powód przerwania wszystkich pętli*/ ) goto wyjscie //... } //... } } wyjscie: printf("o nie, trzeba wyjsc") Wtedy break nie wystarczy, bo masz sporo zagnieżdżonych pętli. Da się to oczywiście rozwiązać dodając jakąś flagę wyjścia sprawdzana w każdej pętli, ale trzeba wtedy dopisywać po każdej pętli sprawdzanie tego warunku. Kod robi się chyba trochę mniej czytelny, niż z wykorzystaniem goto. Widziałem jeszcze na MSDN propozycje wykorzystania goto do obsługi błędów. Kiedy masz sporo wywołań funkcji, które mogą zwrócić błąd, możesz sprawdzać czy się jakiś błąd nie pojawił, i jeśli by się pojawił to skakać w jedno miejsce, gdzie masz cały kod odpowiedzialny za usunięcie zmiennych alokowanych dynamicznie itp. Ogólnie gdzie sprzątasz po sobie. I wtedy w jednym miejscu masz ładnie wszystko porządkowane. A jak by chcieć to zrobić bez goto skończył byś z masą zagnieżdżonych ifów, albo kilkoma miejscami w kodzie, w których sprzątasz po swoim kodzie. To się zwykle rozwiązuje tworząc funkcję w funkcji, która zwraca wartość/wartości do nadrzędnej... goto jest zbędne int A() { for(int i = 0; i < n; i++) { //... for(int j = 0; j < m; j++) { while( /*warunek*/ ) { if( /*błąd czy jakis inny powód przerwania wszystkich pętli*/ ) return 0x10; //... } //... } } return 0x0; } void B() { int result = A(); if(result == 0x10) printf("o nie, trzeba wyjsc") } B();
ethanak Maj 9, 2021 Autor tematu Udostępnij Maj 9, 2021 @matiut2 dokładnie to (i parę innych zasad) można wyczytać w wytycznych pisania kodu kernela Linuksa 39 minut temu, H1M4W4R1 napisał: To się zwykle rozwiązuje tworząc funkcję w funkcji, która zwraca wartość/wartości do nadrzędnej... goto jest zbędne Tyle że zamiast goto wprowadzasz inny dodatkowy element - a gdzie zasada KISS? BTW. ciekawe co miałeś na myśli to pisząc, bo na pewno coś czego nie zauważyłem A teraz ciekawostka: w pewnym języku programowania break jest instrukcją która zwraca wartość, a wartością może być instrukcja. Tam konstrukcja typu: if warunek then break break; przerywa dwie pętle. Zagadka: jaki to język? ( @deshipu proszę nie odpowiadaj, bo wiem że wiesz i popsułbyś zabawę:) )
BananWszyscy Maj 9, 2021 Udostępnij Maj 9, 2021 Z tego co pamiętam z jakichś podstaw czegoś to przy php można było dopisać do break'a z ilu klamerek ma uciec, ale czy można tam funkcję wsadzić to nie wiem
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »