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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 11 lip 2025, o 02:01


    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 ] [ Zaznacz wszystko ]
    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: 27415
    Lokalizacja: Szczecin
    Pomógł: 1043

    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 ] [ Zaznacz wszystko ]
    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 ] [ Zaznacz wszystko ]
    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: 27415
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 1978
    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 2 gości


    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:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO