eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › kwestia estetyczna
Ilość wypowiedzi w tym wątku: 57

  • 11. Data: 2011-08-06 21:24:32
    Temat: Re: kwestia estetyczna
    Od: A.L. <l...@a...com>

    On Sat, 06 Aug 2011 22:13:47 +0200, m...@t...pl wrote:

    >
    >
    >> A co ma wielowatkowosc do rzeczy? I co ma wydajnosc do rzeczy? I co ma
    >> "zlosliwosc uzytkownika" do rzeczy?...
    >Kod programu z wymienionymi przeze mnie cechami jest bardziej
    >skomplikowany. Takie drobiazgi jak estetyka kodu w prostym
    >programie sie nie licza, natomiast w duzym i skomplikowanym moga miec
    >kluczowe znaczenie.
    >

    W dalszym ciagu nie rozumiem co wielowatkowosc ma do rzeczy

    >> Pzrepraszam, ale to nonsens. Oryginalny Poster nic nie mowli o "kodach
    >> bledu"
    >A czy ja gdzies pisalem ze Oryginalny Poster cos mowil o kodach bledow?
    >Padlo pytanie na temat:
    >
    >if(!warunek)
    > return;
    >kod();
    >
    >VS
    >
    >if( warunek ) {
    > kod();
    >}
    >
    >W malej procedurze nie ma najmniejszego znaczenia jaki styl wybierzemy.
    >W duzej, jesli klamra otwiera sie w linii nr. 100, a zamyka w linii nr
    >1000

    Jezeli klamra otwiera sie w linii 100 a zamyka w linii 1000, to
    jedynym sensownym rozwiazaniem jest wyrzucenie programisty z pracy.
    Najlepiej z wilczym biletem.

    Ja przypomne czasy gdy na pl.comp.objects toczyly sie zazarte
    dyskusje, miedzy innymi o stylu programowania. Z owych czasow, zapewne
    przedpotopowych z punktu widzenia mlodych "miszczow" programowania
    pochodzi zasada: jak metoda nie miesci sie w calosci na ekranie, to
    prawdopodobnie cos spieprzyles z projektem.

    Zreszta, zalecenei jest aktualne do dzis. Proponuje mala ksiazeczke
    "The Elements of Java Style", Vermuelen i inni, paragraf 69: Define
    small classes and small methods.

    O ile mi wiadomo, ksiazeczka byla wydana po polsku

    A.L.


  • 12. Data: 2011-08-06 22:49:00
    Temat: Re: kwestia estetyczna
    Od: Wojciech Muła <w...@p...null.onet.pl.invalid>

    On Thu, 4 Aug 2011 23:40:37 +0200 <g...@h...com> wrote:

    > Witam,
    >
    > Czy taka konstrukcja narusza jakieś zasady/sty dobrego projektowania
    > lub jeszcze innego wzorca projektowego? Chodzi mi o drabinkę if..else
    >
    > if (preserveR)
    > {
    > if (oldW >= oldH && !fit)
    > {
    > if (!onlyG || width < oldW)
    > {
    > newW = width;
    > newH = (oldH * newW) / oldW;
    > }
    > }
    > else if (!fit)
    > {
    > if (!onlyG || height < oldH)
    > {
    > newH = height;
    > newW = (oldW * newH) / oldH;
    > }
    > }
    > else
    > {
    > //...
    > }
    > }
    > else
    > {
    > newW = width;
    > newH = height;
    > }

    Hm, ja bym to raczej napisał tak:

    if (preservedR) {
    const bool sH = oldW >= oldH and not fit and (not onlyG or width < oldW);
    const bool sW = not fit and (not onlyG or height < oldH);
    if (sH) {
    newW = width;
    newH = (oldH * newW) / oldW;
    }
    else if (sW) {
    newH = height;
    newW = (oldW * newH) / oldH;
    }
    else
    ...
    }
    else
    ...


    Kiedyś, przy bardziej "dzikiej" logice sterowania, gdzie warunków było
    niewiele, jednak różnych kombinacji sporo, to najpierw kodowałem
    każdy warunek na osobnym bicie, a później instrukcją switch
    obsługiwałem kombinacje. W stosunku do wersji z if/else było 10x lepiej.

    w.


  • 13. Data: 2011-08-06 23:21:31
    Temat: Re: kwestia estetyczna
    Od: m...@t...pl

    > On Sat, 06 Aug 2011 22:13:47 +0200, m...@t...pl wrote:

    > W dalszym ciagu nie rozumiem co wielowatkowosc ma do rzeczy
    Przeciez to proste, nie trzeba wykonywac testow zwiazanych z
    synchronizacja watkow, program bez watkow jest prostszy, mniejszy,
    mniej trzeba sie w nim troszczyc o estetyke kodu. A moze to
    juz chodzi o cos wiecej niz estetyke i styl, moze chodzi o
    jakas "systematycznosc".

    > Jezeli klamra otwiera sie w linii 100 a zamyka w linii 1000, to
    > jedynym sensownym rozwiazaniem jest wyrzucenie programisty z pracy.
    > Najlepiej z wilczym biletem.
    Ja raczej bym wyrzucal gdy przestali myslec a zaczeli stosowac
    jakies "twarde zasady".

    > Ja przypomne czasy gdy na pl.comp.objects toczyly sie zazarte
    > dyskusje, miedzy innymi o stylu programowania. Z owych czasow, zapewne
    > przedpotopowych z punktu widzenia mlodych "miszczow" programowania
    > pochodzi zasada: jak metoda nie miesci sie w calosci na ekranie, to
    > prawdopodobnie cos spieprzyles z projektem.
    Zgadza sie, to oznacza ze prawdopodobnie cos zostalo
    spieprzone. Ale projekt o ktorym mowie jest bardzo
    staranny. Programowanie to nie matematyka, ze jesli
    2 + 2 = 5 to cos na pewno zostalo spieprzone.

    Nie zawsze jest wyrazna korzysc z rozbicia jednej
    duzej procedury na 20 malych procedur. W duzej
    ilosci malych procedur czasami tez mozna odczuc
    wrazenie metliku.

    Duza procedura o ktorej mowie jest polimorficzna w
    wielu klasach. Projekt zostal tak skonstruowany ze
    rozszerzenie funkcjonalnosci dodaje sie poprzez
    tego typu klase (wyprowadzona z bazowej). Przed
    wykonywaniem wlasciwych operacji na danych nastepuje
    szereg testow. Testy sa podzielone na kilka logicznych
    etapow, ale pomimo to, jeden z etapow testowania bywa
    orgomy. Procedury testujace tylko odczytuja dane,
    wiec niebezpieczenstwo bledu jest znikome. Procedury
    testowe niemal nie pracuja na swoich lokalnych danych,
    dane testowe sa przygotowywane przez inne procedury.
    Nie ma mowy o zadnym partactwie w projekcie, projekt
    jest... okreslilbym wlasnie "systematyczny". Np. w
    przypadku wykrycia usterki od razu z duzym
    prawdopodobienstwem wiadomo w ktorym pliku sie
    ona znajduje i w ktorej procedurze.

    Mniej/wiecej mam taki kod:
    pusty wiersz
    pusty wiersz
    /********************************/
    /* Komentarz */
    tmp = odczyt_danych_1();
    if( ! tmp.test_a() ) {
    cofniecie transkacji
    logowanie bledow
    return kod_bledu;
    }
    /*********************************/

    Oczywiscie czasami jest bardziej skomplikowany, ale
    najwazniejsze jest to, ze dane loklane sa mocno ograniczone i
    jeden test ma praktycznie zerowa mozliwosc wplywu na drugi.
    Na 1-2tys linii kodu sa 2-3 zmienne lokalne.

    A zreszta po podziele co zrobic? Moze tak:
    LacznyTest() {
    if( Test1() ) {
    if( Test2() ) {
    if( Test3() ) {
    .............
    return 0;
    } else
    return kod_bledu_N;
    } else
    return kod_bledu_N-1;
    }
    ...................
    } else
    return kod_bledu_1;
    }
    przeciez to jest nadal bagno, trzeba cudu zeby w tych
    klamerkach sie nie pogubic. Kluczowe dla czytelnosci
    jest:
    if( warunek )
    akcja();

    a nie:

    if( warunek )
    duzy odstep
    akcja();

    Od razu widac jaki warunek jest zwiazayn z jaka akcja.

    Analogicznie w duzych petlach:
    for( ... ) {
    if( ) {
    if( ) {
    if( ) {
    }
    }
    }
    }

    Przy duzej ilosci if-ow robi sie metlik. Jesli tylko mozna,
    to nalezy uproscic przez continue. contiune i return upraszcza,
    bo od razu widac ze gdzies pomiedzy zamykajacymi klamerkami
    nie ma kodu ktory sie moze wykonac gdy warunek jest nieprawdziwy.
    Podczas myslenia nad znaczeniem warunku od razu odrzucamy
    czesc kodu petli, albo czesc kodu procedury - jest prosciej,
    mamy mniej aspektow do przeanalizowania.


    > Zreszta, zalecenei jest aktualne do dzis. Proponuje mala ksiazeczke
    > "The Elements of Java Style", Vermuelen i inni, paragraf 69: Define
    > small classes and small methods.
    > O ile mi wiadomo, ksiazeczka byla wydana po polsku
    Dobrze znam ta zasade, jesli widze w danym zastosowaniu
    plynace z niej korzysci to ja stosuje. Ba, nawet jesli
    nie widze korzysci to ja czesto stosuje - bo bardzo lubie.
    Jednak jesli korzysci sa znikome, albo dyskusyjne i jej nie
    zastosuje to potem nie cierpie w zaden sposob z powodu
    jej braku w projekcie.

    Pozdrawiam

    --
    Wysłano z serwisu OnetNiusy: http://niusy.onet.pl


  • 14. Data: 2011-08-07 00:05:21
    Temat: Re: kwestia estetyczna
    Od: A.L. <l...@a...com>

    On Sun, 07 Aug 2011 01:21:31 +0200, m...@t...pl wrote:

    >> On Sat, 06 Aug 2011 22:13:47 +0200, m...@t...pl wrote:
    >
    >> W dalszym ciagu nie rozumiem co wielowatkowosc ma do rzeczy
    >Przeciez to proste, nie trzeba wykonywac testow zwiazanych z
    >synchronizacja watkow,

    Jakich testow?...

    >program bez watkow jest prostszy, mniejszy,

    Mnei sie zawsze wydawalo ze jak sa swtki to jest bardziej
    skomplikwoany


    >mniej trzeba sie w nim troszczyc o estetyke kodu.

    Niby dlaczego?...

    > A moze to
    >juz chodzi o cos wiecej niz estetyke i styl, moze chodzi o
    >jakas "systematycznosc".
    >
    >> Jezeli klamra otwiera sie w linii 100 a zamyka w linii 1000, to
    >> jedynym sensownym rozwiazaniem jest wyrzucenie programisty z pracy.

    > Programowanie to nie matematyka, ze jesli
    >2 + 2 = 5 to cos na pewno zostalo spieprzone.
    >

    Acha. Rozumiem. A czy 2 + 2 = 7 tez moze byc?...

    >Duza procedura o ktorej mowie jest polimorficzna w
    >wielu klasach. Projekt zostal tak skonstruowany ze
    >rozszerzenie funkcjonalnosci dodaje sie poprzez
    >tego typu klase (wyprowadzona z bazowej).

    A co to zanczy?...

    > Przed
    >wykonywaniem wlasciwych operacji na danych nastepuje
    >szereg testow. Testy sa podzielone na kilka logicznych
    >etapow, ale pomimo to, jeden z etapow testowania bywa
    >orgomy.

    [..]

    Dlatego powinien byc ustrukturalizowany a nie napisany jako jeden
    "ciurek" kodu.

    >Przy duzej ilosci if-ow robi sie metlik. Jesli tylko mozna,
    >to nalezy uproscic przez continue. contiune i return upraszcza,

    Owszem, robi sie metlik. Ale nie uparszcza sie go przez continue,
    return i break, tylko przez obiektowosc i zasosowanei odpowiednich
    wzrocow programowych. Nei tylko w trosce o czytelnosc, ale i
    elastycznosc. Oarz dekompozycje testow do zbioru obiektow
    odpowiedzalnych za testowanei okreslonych aspektow.

    A.L.


  • 15. Data: 2011-08-07 06:15:19
    Temat: Re: kwestia estetyczna
    Od: m...@t...pl


    > Owszem, robi sie metlik. Ale nie uparszcza sie go przez continue,
    > return i break
    Nieprawda, return i continue moze upraszczac zapis.
    Przy zapisie z return i continue od razu wiem ze gdzies
    na dole, pomiedzy zamykajacymi klamrami nie ma kodu ktory sie
    moze wykonac. Lepiej widac do czego ten if sluzy.

    A co z break nie wiem w tej chwili... chyba tez moze
    upraszczac, czesto czytelniej jest wstawic w petle
    kilka:
    if( warunek1)
    break;
    if( warunek2 )
    break;
    niz kombinowac z jednym bardzo skomplikowanym wyrazeniem.

    Zdarzaja sie takie duze procedury w programach ktorych
    rozbicie na wiele malych nie zwieksza czytelnosci w
    istotny sposob. Sam nie wiem dlaczego, moze dlatego ze
    duza procedura wykonuje dobrze wydzielone zadanie? Mam
    wiele takich procedur, w kazda procedure mam wbite rozne
    testy i czuje ze jak rozbije ja na male procedury to strace
    na czytelnosci.

    Kiedy czytelnosc sie zwieksza? Gdy jest mniej kodu. W
    moim przypadku nie bedzie mniej kodu, nie da sie
    wydzielic wspolnego kodu w procedurach. Kiedy jeszcze
    sie zwieksza czytelnosc? Gdy procedury pracuja na
    swoich danych loklanych. Moje procedury testowe
    prawie sa pozbawione lokalnych danych.

    > tylko przez obiektowosc i zasosowanei odpowiednich
    > wzrocow programowych. Nei tylko w trosce o czytelnosc, ale i
    > elastycznosc. Oarz dekompozycje testow do zbioru obiektow
    > odpowiedzalnych za testowanei okreslonych aspektiow.
    Uzywanie hierarchii obiektow do sprawdzenia czy uzytkownik
    moze wykonac jakas operacje jest troche jak uzywanie
    armaty do zabicia komara. Nawet podzial na male funkcje
    intuicyjne wydaje sie zly. Poza tym te procedury pare
    razy mocno sie zmienily w trakcie rozwijania projektu.
    Jakbym po kazdej zmianie mial sie zastanawiac nad doborem
    optymalnej hierarchii obiektow to bym stracil kilka
    dni czasu.

    Nic mnie nie przekonuje, czasami duza procedura jest
    jak najbardziej na miejscu.

    Pozdrawiam


    --
    Wysłano z serwisu OnetNiusy: http://niusy.onet.pl


  • 16. Data: 2011-08-07 08:29:04
    Temat: Re: kwestia estetyczna
    Od: g...@p...onet.pl

    >

    > > Owszem, robi sie metlik. Ale nie uparszcza sie go przez continue,

    > > return i break

    > Nieprawda, return i continue moze upraszczac zapis.

    > Przy zapisie z return i continue od razu wiem ze gdzies

    > na dole, pomiedzy zamykajacymi klamrami nie ma kodu ktory sie

    > moze wykonac. Lepiej widac do czego ten if sluzy.

    >

    > A co z break nie wiem w tej chwili... chyba tez moze

    > upraszczac, czesto czytelniej jest wstawic w petle

    > kilka:

    > if( warunek1)

    >  break;

    > if( warunek2 )

    > break;

    > niz kombinowac z jednym bardzo skomplikowanym wyrazeniem.

    >

    > Zdarzaja sie takie duze procedury w programach ktorych

    > rozbicie na wiele malych nie zwieksza czytelnosci w

    > istotny sposob. Sam nie wiem dlaczego, moze dlatego ze

    > duza procedura wykonuje dobrze wydzielone zadanie? Mam

    > wiele takich procedur, w kazda procedure mam wbite rozne

    > testy i czuje ze jak rozbije ja na male procedury to strace

    > na czytelnosci.

    >

    > Kiedy czytelnosc sie zwieksza? Gdy jest mniej kodu. W

    > moim przypadku nie bedzie mniej kodu, nie da sie

    > wydzielic wspolnego kodu w procedurach. Kiedy jeszcze

    > sie zwieksza czytelnosc? Gdy procedury pracuja na

    > swoich danych loklanych. Moje procedury testowe

    > prawie sa pozbawione lokalnych danych.

    >

    > > tylko przez obiektowosc i zasosowanei odpowiednich

    > > wzrocow programowych. Nei tylko w trosce o czytelnosc, ale i

    > > elastycznosc. Oarz dekompozycje testow do zbioru obiektow

    > > odpowiedzalnych za testowanei okreslonych aspektiow.

    > Uzywanie hierarchii obiektow do sprawdzenia czy uzytkownik

    > moze wykonac jakas operacje jest troche jak uzywanie

    > armaty do zabicia komara. Nawet podzial na male funkcje

    > intuicyjne wydaje sie zly. Poza tym te procedury pare

    > razy mocno sie zmienily w trakcie rozwijania projektu.

    > Jakbym po kazdej zmianie mial sie zastanawiac nad doborem

    > optymalnej hierarchii obiektow to bym stracil kilka

    > dni czasu.

    >

    > Nic mnie nie przekonuje, czasami duza procedura jest

    > jak najbardziej na miejscu.

    >

    > Pozdrawiam

    >

    tak naprawde jak sie zastanowic to duze zaglebienia ifow
    nie zdarzaja sie czesto - nawet 'if w ifie' to raczej ewenement,
    musze kiedys zwrocic na to wiecej uwagi
    (mozna by moze nawet powiedzec ze same ify zdarzaja sie srednio
    czesto - w sensie ifow nie ma wcale az tak duzo )



    --
    Wysłano z serwisu OnetNiusy: http://niusy.onet.pl


  • 17. Data: 2011-08-07 10:02:07
    Temat: Re: kwestia estetyczna
    Od: m...@t...pl



    > tak naprawde jak sie zastanowic to duze zaglebienia ifow
    > nie zdarzaja sie czesto - nawet 'if w ifie' to raczej ewenement,

    Jesli napiszemy tak:
    if( warunek1 ) {
    if( warunek2 ) {
    if( warunek3 ) {
    if( warunek4) {
    if( warunek5 ) {
    operacje_1();
    }
    }
    operacje_2();
    }
    }
    }

    to zaglebienie ifow jest duze. Analiza po pierwszym spojrzeniu
    na taki kod jest utrudniona - latwo pomylic sie w liczeniu
    klamerek.


    Jesli napiszemy tak:
    if( !warunek1 ) return;
    if( !waruenk2 ) return
    // reszta kodu

    to od razu mamy pewnosci ze warunek1 i warunek2 nie
    ma nic wsplolnego z operacje_2(). Analiza
    wersji z return jest prostsza.


    > musze kiedys zwrocic na to wiecej uwagi
    > (mozna by moze nawet powiedzec ze same ify zdarzaja sie srednio
    > czesto - w sensie ifow nie ma wcale az tak duzo )
    Wlasnie siedze nad takim projektem w ktorym ze wzgledu na
    ogromna ilosc testow i ifow w "kazdej" klasie zostaly do
    tego celu wydzielone 3 wirtualne metody. One niemal nic
    innego nie robia tylko:

    tmp = dane_tymczasowe()
    if( ! jakis_test( tmp ) ) {
    jakies_logi();
    return kod_bledu;
    }


    Druga procedure na okolo 1-2tys wierszy mam taka:
    a = dane_a1()
    b = dane_b1()
    p1 = funckcja_nieliniowa( a , b )

    a = dane_a2()
    b = dane_b2()
    p2 = funckcja_nieliniowa( a , b )

    ..........................
    return p1 * p2 * ... * pn;
    Przy czym ponad 50% tego kodu to komentarze.

    Nie da sie tego podzielic na male funkcje z wyraznymi
    korzysciami.

    Pozdrawiam


    --
    Wysłano z serwisu OnetNiusy: http://niusy.onet.pl


  • 18. Data: 2011-08-07 10:03:56
    Temat: Re: kwestia estetyczna
    Od: Wojciech Jaczewski <w...@o...pl>

    m...@t...pl wrote:

    >> Owszem, robi sie metlik. Ale nie uparszcza sie go przez continue,
    >> return i break
    > Nieprawda, return i continue moze upraszczac zapis.
    > Przy zapisie z return i continue od razu wiem ze gdzies
    > na dole, pomiedzy zamykajacymi klamrami nie ma kodu ktory sie
    > moze wykonac. Lepiej widac do czego ten if sluzy.

    Czasami też upraszczać może użycie goto - chociaż zapewne wielu mędrców-
    teoretyków powie że tego używać nie wolno, a zamiast tego trzeba zrobić kod
    5 razy dłuższy, za to pozbawiony tego defektu. Ale jak przyjrzeć się
    dostępnym dobrze działającym programom open-source, to w wielu z nich można
    spotkać użycie technik, których ci mędrcy-teoretycy chętnie by zakazali.
    Zarówno użycia goto, jak i bardzo długich funkcji.
    Ponieważ A.L. często podaje tytuły do książek coś opisujących, ja odnośnie
    używania długich funkcji sugeruję "The Art of Unix Programming". Niestety
    nie podam konkretnie rozdziału, bo nie pamiętam. Można tam też przeczytać
    coś o programowaniu obiektowym.


  • 19. Data: 2011-08-07 15:06:15
    Temat: Re: kwestia estetyczna
    Od: p...@p...onet.pl

    >

    >

    > > tak naprawde jak sie zastanowic to duze zaglebienia ifow

    > > nie zdarzaja sie czesto - nawet 'if w ifie' to raczej ewenement,

    >

    > Jesli napiszemy tak:

    > if( warunek1 ) {

    >  if( warunek2 ) {

    >     if( warunek3 ) {

    >       if( warunek4) {

    >         if( warunek5 ) {

    >           operacje_1();

    >         }

    >       }

    >       operacje_2();

    >     }

    >  }

    > }

    >

    > to zaglebienie ifow jest duze. Analiza po pierwszym spojrzeniu

    > na taki kod jest utrudniona - latwo pomylic sie w liczeniu

    > klamerek.

    >

    >

    > Jesli napiszemy tak:

    > if( !warunek1 ) return;

    > if( !waruenk2 ) return

    > // reszta kodu

    >

    > to od razu mamy pewnosci ze warunek1 i warunek2 nie

    > ma nic wsplolnego z operacje_2(). Analiza

    > wersji z return jest prostsza.

    >

    >

    > > musze kiedys zwrocic na to wiecej uwagi

    > > (mozna by moze nawet powiedzec ze same ify zdarzaja sie srednio

    > > czesto - w sensie ifow nie ma wcale az tak duzo )

    > Wlasnie siedze nad takim projektem w ktorym ze wzgledu na

    > ogromna ilosc testow i ifow w "kazdej" klasie zostaly do

    > tego celu wydzielone 3 wirtualne metody. One niemal nic

    > innego nie robia tylko:

    >

    > tmp = dane_tymczasowe()

    > if( ! jakis_test( tmp ) ) {

    >  jakies_logi();

    >  return kod_bledu;

    > }

    >

    >

    > Druga procedure na okolo 1-2tys wierszy mam taka:

    > a = dane_a1()

    > b = dane_b1()

    > p1 = funckcja_nieliniowa( a , b )

    >

    > a = dane_a2()

    > b = dane_b2()

    > p2 = funckcja_nieliniowa( a , b )

    >

    > ..........................

    > return p1 * p2 * ... * pn;

    > Przy czym ponad 50% tego kodu to komentarze.

    >

    > Nie da sie tego podzielic na male funkcje z wyraznymi

    > korzysciami.

    >

    no ja powiedzialbym akurat raczej zgadzam sie z tym co ty tu
    mowisz tak ze mnie nie musisz co do tego przekonywac -
    zarazem nie pale sie zeby sie w to wglebiac bo tych spostrzezen
    dokonalem sobie juz jakis czas temu;
    choc mysle ze tez pare rzeczy o ifach mozna sobie jeszcze ustalic,
    np przyjac robocza zasade by unikac czy przyjrzec sie przypadkow
    'zagniezdzonych' ifow czy 'dlugich' ifow (jak mowie zdarza sie
    to raczej rzadko) lub ifom wogole


    --
    Wysłano z serwisu OnetNiusy: http://niusy.onet.pl


  • 20. Data: 2011-08-07 15:53:55
    Temat: Re: kwestia estetyczna
    Od: A.L. <l...@a...com>

    On Sun, 07 Aug 2011 12:02:07 +0200, m...@t...pl wrote:

    >
    >
    >> tak naprawde jak sie zastanowic to duze zaglebienia ifow
    >> nie zdarzaja sie czesto - nawet 'if w ifie' to raczej ewenement,
    >
    >Jesli napiszemy tak:
    >if( warunek1 ) {
    > if( warunek2 ) {
    > if( warunek3 ) {
    > if( warunek4) {
    > if( warunek5 ) {
    > operacje_1();
    > }
    > }
    > operacje_2();
    > }
    > }
    >}
    >
    >to zaglebienie ifow jest duze. Analiza po pierwszym spojrzeniu
    >na taki kod jest utrudniona - latwo pomylic sie w liczeniu
    >klamerek.
    >
    >
    >Jesli napiszemy tak:
    >if( !warunek1 ) return;
    >if( !waruenk2 ) return
    >// reszta kodu
    >
    >to od razu mamy pewnosci ze warunek1 i warunek2 nie
    >ma nic wsplolnego z operacje_2(). Analiza
    >wersji z return jest prostsza.
    >
    >
    >> musze kiedys zwrocic na to wiecej uwagi
    >> (mozna by moze nawet powiedzec ze same ify zdarzaja sie srednio
    >> czesto - w sensie ifow nie ma wcale az tak duzo )
    >Wlasnie siedze nad takim projektem w ktorym ze wzgledu na
    >ogromna ilosc testow i ifow w "kazdej" klasie zostaly do
    >tego celu wydzielone 3 wirtualne metody. One niemal nic
    >innego nie robia tylko:
    >
    >tmp = dane_tymczasowe()
    >if( ! jakis_test( tmp ) ) {
    > jakies_logi();
    > return kod_bledu;
    >}
    >
    >
    >Druga procedure na okolo 1-2tys wierszy mam taka:
    >a = dane_a1()
    >b = dane_b1()
    >p1 = funckcja_nieliniowa( a , b )
    >
    >a = dane_a2()
    >b = dane_b2()
    >p2 = funckcja_nieliniowa( a , b )
    >
    >..........................
    >return p1 * p2 * ... * pn;
    >Przy czym ponad 50% tego kodu to komentarze.
    >
    >Nie da sie tego podzielic na male funkcje z wyraznymi
    >korzysciami.
    >
    >Pozdrawiam


    Cytat 1

    Single Entry Point, Single Exit Point Style

    A piece of code is likely to be more easily understood if it has only
    one entry point (at the top of its listing) and only one exit point at
    (or near, e.g., a return statement just before the closing "}" of a
    non-void C++ function) the bottom of its listing. In C++, this
    philosophy has the following implications:

    Don't use goto statements. If the target of a goto is not at the start
    of its block, then its block has two entry points; if the goto
    statement is not at the end of its block, then its block has two exit
    points. The goto statement can also have other undersirable effects on
    the understanding of the listing; for example, see the Loop Style
    section.
    Don't use exit statements. Since a typical C++ program ends at a
    return 0; statement at the end of its main function, the use of an
    exit statement provides a second exit point from the program.
    Don't use break statements except to end a case of a switch structure.
    To use a break, say, to exit a loop, provides the loop with a second
    exit point.
    Some argue for exceptions to the rules stated above in order to
    simplify the flow of control amidst complex code. For example, some
    argue that if main calls on blah, which calls on ..., which calls on
    gallumph, and an unusual error is detected by the code of the latter
    function that makes further processing within the program pointless,
    it is easier for the programmer to use an exit statement to end the
    run of the program than to provide appropriate if statements, one in
    each of the chain of functions alluded to above, to provide "normal"
    exit from the main function's end-of-listing or return 0; statement.
    Since student exercises rarely get complex enough to make a strong
    argument along these lines, I prefer my students to follow the
    guidelines above.

    Cytat 2

    Length of a Subprogram

    KISS - Keep it short, smarty! (You thought I would use "stupid"?
    Stupid people don't write software.)

    In general, it's wise to keep every subprogram (in C++, every
    function, including main) short. A reader typically tries to
    understand one function at a time, so keeping functions short makes
    them more "digestable." A classical guideline: a maximum of 25 lines
    of code, what used to be the maximum viewable on a computer screen
    using a typical text editor. Today's screens often show more than 25
    lines, and I won't send a student to the guillotine for a 26th line,
    but if you're in excess of 30, there's probably a natural way to
    abbreviate your function, perhaps by extracting one or more blocks of
    its code as (a) separate function(s).

    http://purple.niagara.edu/boxer/essays/prog/style.ht
    m#toc

    Cytat 3:

    Rule of Parsimony: Write large program only if it is demonstrated that
    nothing else will do

    Teh Art of UNIX Programming, strona 40

    Ja mam wrazenie neijakie ze 20 lat programowania strukturalnego (1965
    - 185) i prawie 30 lat obiektowego (1985 - do dzis) jakos wyparowaly.
    A moze tego nie ucza dzisiaj?... I prowracamy do programowanie w
    COBOLU? Programwoania w OBOLU przy pomocy Javy?...

strony : 1 . [ 2 ] . 3 ... 6


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: