Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 14 sty 2025, o 23:58


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
Autor Wiadomość
PostNapisane: 20 sie 2016, o 14:44 
Offline
Nowy

Dołączył(a): 17 mar 2016
Posty: 24
Pomógł: 0

Cześć,

Mój program wygląda mniej więcej tak:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Z tego co widziałem, sporo osób odradza używanie polecenia "goto", natomiast nigdzie nie znalazłem, dlaczego jest ono tak obciążające. Pierwszy raz zostałem zmuszony do jego użycia, a zastąpienie wiązałoby się z koniecznością dodania kolejnej pętli while oraz sprawdzania dodatkowego warunku kilkukrotnie (w każdej z pętli). W związku z tym pytam, jak to faktycznie wygląda? Warto stosować a może nie?

Z góry dzięki za odpowiedź!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sie 2016, o 15:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 30 cze 2016
Posty: 247
Lokalizacja: Rybnik
Pomógł: 13

Dużo osób odradza dlatego że goto jest uzależniajce i nabiera się złych nawyków ale czaem można je użyć.

_________________
Situs != Situs



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sie 2016, o 15:21 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27345
Lokalizacja: Szczecin
Pomógł: 1041

dzikidziku napisał(a):
Z tego co widziałem, sporo osób odradza używanie polecenia "goto"

I bardzo dobrze odradzają ... ja bym wręcz powiedział że w C w ogóle można obejść się bez goto w 100% przypadków

dzikidziku napisał(a):
natomiast nigdzie nie znalazłem, dlaczego jest ono tak obciążające

A co to znaczy "obciążające? Co ? procesor? Flash ? ..... w tym zakresie w ogóle nie jest obciążające

dzikidziku napisał(a):
Pierwszy raz zostałem zmuszony do jego użycia,

Gdybym ja albo milion innych osób w takim wypadku było zmuszonych do użycia goto to uwierz mi, że większość moich programów byłaby naszprycowana goto jak dobra kasza skwarkami - a tymczasem w ŻADNYM moim kodzie nie znajdziesz goto ;) Od NAJPROSTSZYCH po NAJBARDZIEJ SKOMPLIKOWANE ;)

dzikidziku napisał(a):
a zastąpienie wiązałoby się z koniecznością dodania kolejnej pętli while oraz sprawdzania dodatkowego warunku kilkukrotnie (w każdej z pętli).

W ogóle by się z tym nie wiązało - ty po prostu kompletnie źle podchodzisz jak na razie do pisania kodu i jeśli pójdziesz na łatwiznę i zaczniesz w tak mega PROSTYCH przypadkach sięgać po goto to zaczniesz robić z kodu w C coś na "ala kształt Bascoma" a później będzie "odlot" ;)

dzikidziku napisał(a):
Warto stosować a może nie?

Najlepiej ZAPOMNIEĆ że w języku C istnieje GOTO szczególnie gdy się jest początkującym .... poważnie.

Zacznij korzystać z FUNKCJI w języku C, chociaż wiem i zdaję sobie z tego sprawę jak trudno ludziom którzy korzystali z Bascoma i ich programy to same "goto" "gosub" "goto" "goto" i "gosub"


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sie 2016, o 15:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 kwi 2014
Posty: 438
Lokalizacja: Zambrów
Pomógł: 22

dzikidziku napisał(a):
Z tego co widziałem, sporo osób odradza używanie polecenia "goto", natomiast nigdzie nie znalazłem, dlaczego jest ono tak obciążające.

goto nie jest obciążające :). Po prostu nie jest zalecane jego używanie ponieważ ma więcej minusów w zastosowaniu niż plusów.

- Po pierwsze zawsze da się tak napisać kod, aby uniknąć jego stosowania. W twoim przypadku można zastosować polecenia break, continue itp., oraz inaczej napisać kod, aby nie było potrzebne jego stosowanie. Konkretnie to ciężko podpowiedzieć bo nie wiadomo co twój kod ma robić, jakieś komentarze by się przydały i ogólnie opis. Zawsze można inaczej w ogóle algorytm przygotować, który nie wymaga tak jak teraz u ciebie goto
- Po drugie robienie takich nieprzewidzianych skoków w programie zaciemnia kod i powoduje, że jak jest on bardziej rozbudowany to bardzo trudno jest znaleźć błąd jak się pojawi, nie ma się tak na prawdę żadnej kontroli nad działaniem programu, którą dają np funkcje itp.
- Po trzecie jeden skok jest w miarę łatwy do zastosowania w krótkim kodzie natomiast spróbuj coś napisać używając 10 goto, a później po jakimś czasie, miesiącu, pół roku wróć do kodu i spróbuj odgadnąć co on faktycznie robi :D Dodatkowo jeżeli skoki zagnieżdżają się to już w ogóle ciężko jest cokolwiek sprawdzić i ostatecznie analiza zajmuje dużo więcej czasu niż napisanie innego kodu bez goto

Ogólnie jedyny plus goto jest taki, że w krótkim i prostym kodzie jest po prostu łatwiej go zastosować w niektórych przypadkach jednak dla elegancji i nauki dobrych nawyków programowania odradza się iść na skróty i lepiej dla szarych komórek pokombinować używając innych poleceń i możliwości jakie daje język c. Zaprocentuje Ci to przy bardziej złożonych projektach i zagwozdkach programistycznych :)

Jednak ostatecznie liczy się osiągnięty cel i czy działa poprawnie algorytm więc jak działa i są tam goto to nikt nie powinien mieć o to pretensji :>

O mistrz Mirek mnie wyprzedził :D

_________________
.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sie 2016, o 17:32 
Offline
Nowy

Dołączył(a): 17 mar 2016
Posty: 24
Pomógł: 0

Cytuj:
I bardzo dobrze odradzają ... ja bym wręcz powiedział że w C w ogóle można obejść się bez goto w 100% przypadków

Nie powiedziałem, że nie potrafię napisać tego bez pętli goto :)

Cytuj:
A co to znaczy "obciążające? Co ? procesor? Flash ? ..... w tym zakresie w ogóle nie jest obciążające

Cóż, może użyłem złego słowa, chodziło mi o szybkość działania

Cytuj:
W ogóle by się z tym nie wiązało - ty po prostu kompletnie źle podchodzisz jak na razie do pisania kodu i jeśli pójdziesz na łatwiznę i zaczniesz w tak mega PROSTYCH przypadkach sięgać po goto to zaczniesz robić z kodu w C coś na "ala kształt Bascoma" a później będzie "odlot" ;)

Nie chodziło mi o pójście na łatwiznę, a raczej o to, że "przypomniałem" sobie o czymś takim jak "goto" i uznałem, że może być idealne w tym przypadku. Dlatego właśnie stwierdziłem, że najlepszym wyjściem jest spytanie tych, którzy mogli mieć z tym do czynienia :D

Cytuj:
Po trzecie jeden skok jest w miarę łatwy do zastosowania w krótkim kodzie natomiast spróbuj coś napisać używając 10 goto, a później po jakimś czasie, miesiącu, pół roku wróć do kodu i spróbuj odgadnąć co on faktycznie robi

Moim priorytetem jest szybkość działania. Estetyka nie ma znaczenia :)

Gdybym chciał wywalić te "goto" to kod mógłby wyglądać następująco, natomiast jak widać w najlepszym przypadku trzeba sprawdzać "if(DataReceived)" co najmniej dwukrotnie, a "goto" robi to za jednym razem. Jeśli byłoby więcej pętli to znowu powstaje konieczność dodania sprawdzania warunku.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Po otrzymaniu danych program musi jak najszybciej przejść do głównej pętli while, stąd taka konstrukcja.

Jak widzicie, dalej nie jestem przekonany :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sie 2016, o 18:57 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27345
Lokalizacja: Szczecin
Pomógł: 1041

dzikidziku napisał(a):
Jak widzicie, dalej nie jestem przekonany

Ja np nie mam najmniejszego zamiaru ciebie przekonywać ;) ... sam sobie krzywdę zrobisz. Pokazałem ci drogę ... czy z nie skorzystasz ? ... twoja sprawa ;) Chcesz się zakatować "goto" ;) katuj się ... a jeśli masz pytania i chcesz czegoś się nauczyć to je zadaj. GOTO to łatwizna która zaprowadzi cię na manowce na tym etapie nauki programowania. Twoja strata.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sie 2016, o 19:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 mar 2014
Posty: 162
Pomógł: 6

To w C jest goto ? ;)

_________________
1+1=10



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sie 2016, o 19:56 
Offline
Użytkownik

Dołączył(a): 29 mar 2012
Posty: 595
Lokalizacja: Jaworzno
Pomógł: 39

sredni napisał(a):
To w C jest goto ? ;)


W C++ i C# teź :P

_________________
Pozdrawiam
PP



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sie 2016, o 20:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 mar 2014
Posty: 162
Pomógł: 6

Piotrek_P napisał(a):
sredni napisał(a):
To w C jest goto ? ;)


W C++ i C# teź :P

:lol:

_________________
1+1=10



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sie 2016, o 06:13 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 40
Pomógł: 0

Główną wadą instrukcji goto jest to że wyskakując np. z pętli nie odtwarzamy stosu. Dane zapisane na stosie pozostają i po jakimś czasie stos się przepełnia a program działa w nieokreślony sposób trudny do przewidzenia.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sie 2016, o 11:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

Użyłem kiedyś goto w swoim programie w Bascom. Nie mam nic na swoją obronę... No może jedynie to, że to był moj pierwszy program na avr i nikomu go nie pokazywałem :)
Dobrze Ci chłopaki radzą - goto w programie wprowadza zamieszanie i można się dzybko wpakować w problemy. Po prostu zapomij o nim.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sie 2016, o 11:52 
Offline
Nowy

Dołączył(a): 17 mar 2016
Posty: 24
Pomógł: 0

Cytuj:
Główną wadą instrukcji goto jest to że wyskakując np. z pętli nie odtwarzamy stosu. Dane zapisane na stosie pozostają i po jakimś czasie stos się przepełnia a program działa w nieokreślony sposób trudny do przewidzenia.

No i to jest konkret, natomiast akurat w moim przypadku na stosie zostaje około 14 bajtów, a program zaraz powraca do owych pętli. Aczkolwiek warto wziąć to pod uwagę. :)

Cytuj:
Użyłem kiedyś goto w swoim programie w Bascom. Nie mam nic na swoją obronę.

Hehe, dobre :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO