-
Data: 2018-11-18 10:28:51
Temat: Re: Niezmienniki pętli
Od: fir <p...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]W dniu niedziela, 18 listopada 2018 10:10:22 UTC+1 użytkownik fir napisał:
> W dniu piątek, 16 listopada 2018 16:48:18 UTC+1 użytkownik s...@g...com
napisał:
> > > Czy w związku z tym zagadnienie niezmienników jest niepotrzebne? A może nadal
jest potrzebne i coś innego je zastępuje?
> >
> > 1. Wiedziałem co to jest.
> >
> > 2. Stosuję
> >
> > 3. Sam też stosujesz
> >
> > Najprostrze zastosowanie:
> > QList<int> lList = {0, 1, 2, 3, 4, 5};
> > for(int i(0); i < lList.size(); ++i)
> > // tu robisz coś z lList
> > W tej pętli niezmiennikiem sprawdzanym przed wejściem w pętlę i po kazdej
iteracji jest:
> > i < lList.size()
> >
> > Nieco bardziej ogólne jest:
> > QList<int> lList = {0, 1, 2, 3, 4, 5};
> > for(int& lItem : lList)
> > // tu robisz coś z lItem
> > W tym przypadku niezmiennikiem (ukrytym) jest fakt iteracji po wszystkich
elementach listy.
> >
> > 4. Zazwyczaj dalszych niezmienników w pętli nie sprawdzam. Głównie ze względu na
2 wady:
> > 4.1. Puchnięcie i zaciemnianie kodu.
> > 4.2. Spowolnienie programu.
> >
> > 5. Bardzo często sprawdzam parametry wejściowe funkcji (wierzę i stosuję coś w
rodzaju programowania kontraktowego).
> > 5.1. Wierzę w try, throw, catch (wyjątki obowiązkowo dziedziczone po
std::exception z opisem i kodem błędu).
> > 5.2. Nie wierzę w i nie cierpię Assert (to tak jak by bez ostrzeżenia uderzyć
kogoś w twarz bez dalszego komentarza).
> > 5.3. Toleruję wartości zwracane (jako informacje o błędach) i brak standaryzacji
w dostępie do opisów błędów w Qt.
>
> ostatnio odkrylem dosyc odkrywczy sposob
> dilowania (tj forme kodowanie obslugi bledow) z bledami w jezykach podobnych
> do c
>
> wymaga on pewnej poprawki do jezyka,
>
> (i jest opisany na clc, troche nie che mi sie tu opisywac bo nie lubie sie
powtarzac)
>
> jest on ogolnie ciekawy bo mz pokazuje co to jest normalne dilowanie z bledami i na
czym to normalne dilowanie z bledami normalnie polega (ma polegac)
>
> nawiasem mowiac w swietle tego asercje
> albo bledy przypadkowe (jak np zmienienie sie jakiejs komorki w rami i wyjatek typu
nielegalna instrukcja) nie sa normalnymi sposobami dilowania z bledami tylko pewnymi
case'ami nadspecjalnymi
>
> NORMALNY i najbardziej typowy sposob z
> handlowaniem z bledami w programie to zwykle zwrocenie informacji o bledzie do
funkcji w tyl - tylko ze nie powinno to byc mieszane ze zwracaniem poprawnej wartosci
w tym kanale w ktorym zwraca sie wartosci w sytuacjach niebledowych..
>
> dzis jesli ktos zwraca blad w tyl (jak rozne api robia) to ogolnie robi dobrze,
> tylko ze jesli wtyka kody bledow w wartosci zwracane to zarazem robi zle ;c
>
> https://groups.google.com/forum/#!topic/comp.lang.c/
p1CcmgZKkV4
albo ok niech, bedzie opisze po polsku
sposob polage on na tym
int x = foo(20,10) on error { printf("error"); }
polaga on na tym ze wywolanie kazdej funkcja ktora moze zwrocic error powinno
obsluzyc branch tj wstawic tam dowolny kod do obslugi bledu
po stronie ciala funkcji wyglada to tak ze, wychodzisz z funkcji nie przez return ale
inne slowo kluczowe np error
int foo(int a, int b)
{
if(a<b) error;
return a-b;
}
implementacja, ustawiasz po wyjsciu z funkcji jakas flage, np carry, zero czy cos w
tym stylu
niektore zalety
1. musisz jawnie napisac klauzule obslugi bledu (zacheca do klarownej obslugi)
2. w ciele wolanej funkcji obsluga bledow jest dosyc jasna i klarowna (zacheca do
klarownej obslugi)
obie strony zachecaja do klarownej obslugi, po prostu kodowanie bledow jako
normalnych stanow programu do czego obecne c jakos nie zacheca
jest to wielka zaleta ... kody sa bardziej kompletne, moga byc 'zamniete na bledy'
3. nie mieszasz wartosci zwracanej i kodu bledu (to mieszanie to syf)
jest to wielka zaleta ... kody sa czystsze
4. skladania jest wzglednie ladna (moze poprobuje poprawic to wyzej to draft)
(napewno sprobuje poprawic bo to zarys, nie wiem np co z tymi domyslnymi sygnalami,
tj ze skladnia do tego o czym troche nizej)
5.jest szybkie w runtime (chyba szybciej nie mozna, nie jestem pewien, kiedys mozna
pomyslec)
6, rozwiazuje duzo abstrakcyjnego chaosu, bo ludzi zastaawiaja sie jak dilowac z
bledami to jest tak naprawde poprawny sposob
to jest tez duza zaleta boludzi emaja sporo problemow ze zrozumieniem co robic z
bledami - to co ja tutaj proponuje jest tak naprawde dosyc poprawneym rozwiazaniem -
zwracasz bald wyzej, kod wywolywacza podejmie decyzje
dopuszczam lub rozwazam jeszcze opcje dla super leniwych, opcje opuszczania tych
klauzul (ew jakiegos zaznaczania ze sa opuszczane, nie ejestem pewien) w takim
wypadku, na kazdy zwrocony a nie zbranczowany blad lecialby sygnal do
zarejsetrowanego handlera eventow - co tez jest wygodne jak ktos jest superleniwy
pytaniem jest troche 1) czy dopuszczac opuszczanie tych branczy czy raczej to
poprostu zawsze wymuszac (do tego zdanie moga byc podzielone, ale raczej wydaje sie
ze na specjalna prosbe autora kodu przynajmniej (jakas opcja kompilaci czy cos nalezy
na o dozwolic)) 2) drygie pytanie czy na takie opuszczenie kompletnie ignorowac te
brancze czy zmuszac do oznaczania jakims prostym slowem , chocby "SIG" zeby bylo
wiadome
ze blad teoretycznie moez poleciec 3)
trzecie pytanie co robic w wypadku gdy taki nieobsluzony blad poleci,
najrozsadzniejsza opcja chyba wydaje sie wywalanie signal handlera z jakims domyslnym
kodem w tym handlerze (typu wywalenie message boxa z informacja
"error taki a taki w funkcji takiej a takiej zwrocony przez funkcje taka a taka,
nacisnij ok by zamknac program (ignoruj by zignorowac?"
lekko otwarta kwestia jest tez w jakis sporob te polecenie arror powinny zwracac info
o bledzie oraz co robic z wartoscia zwracana w tym wypadku (w duchu starego c
znaczyloby chyba ze jest undefined, ale ew mozna wymyslec cos innego)
Następne wpisy z tego wątku
- 18.11.18 17:35 Sebastian Biały
- 19.11.18 08:14 Maciej Sobczak
- 19.11.18 09:22 Roman Tyczka
- 19.11.18 10:37 Queequeg
- 19.11.18 10:45 Queequeg
- 19.11.18 17:15 g...@g...com
- 19.11.18 19:45 g...@g...com
- 19.11.18 19:49 g...@g...com
- 19.11.18 21:18 s...@g...com
- 19.11.18 21:44 Queequeg
- 19.11.18 22:10 fir
- 19.11.18 22:16 fir
- 19.11.18 23:12 g...@g...com
- 20.11.18 00:00 AK
- 20.11.18 00:20 AK
Najnowsze wątki z tej grupy
- Alg. kompresji LZW
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
Najnowsze wątki
- 2025-02-21 Warszawa => Key Account Manager IT <=
- 2025-02-21 Warszawa => Data Engineer (Tech Lead) <=
- 2025-02-21 Aliexpress zaczął oszukiwać na bezczelnego.
- 2025-02-21 Warszawa => System Architect (Java background) <=
- 2025-02-21 Kula w łeb
- 2025-02-21 Warszawa => System Architect (background deweloperski w Java) <=
- 2025-02-21 Warszawa => Solution Architect (Java background) <=
- 2025-02-21 Lublin => JavaScript / Node / Fullstack Developer <=
- 2025-02-21 Pawel S
- 2025-02-21 Warszawa => Key Account Manager (Usługi HR) <=
- 2025-02-21 Katowice => Senior Field Sales (system ERP) <=
- 2025-02-21 Chrzanów => Programista NodeJS <=
- 2025-02-21 Wrocław => Konsultant wdrożeniowy Comarch XL/Optima (Księgowość i
- 2025-02-21 Warszawa => Administrator Systemów Windows IT <=
- 2025-02-21 Wrocław => Specjalista ds. Sprzedaży (transport drogowy) <=