• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Powtarzanie funkcji zależnie od jej wewnętrznych warunków

Object Storage Arubacloud
+1 głos
125 wizyt
pytanie zadane 15 kwietnia w Java przez Jacek0325 Obywatel (1,070 p.)

Cześć

Programując w java, spotkałem się z sytuacją, że chciałem, żeby wywoływane funkcje wykonywały się w pętli aż do spełnienia określonego warunku wewnątrz tych funkcji. Wymyśliłem, że mogą być typu boolean i zwracać true, żeby się powtarzać, lub false, żeby się przerwać. Przykładowy kod:

public class Main {
    public static void main(String[] args) {
        while(true) {
            if(!example()) break;
        }
    }
    public static boolean example() {
        boolean active = true;

        // główny kod, m.in. decydujący o wartości active
        
        return active;
    }
}

Zastanawiam się, czy zaawansowani programiści też kierują się taką konwencją, czy może jakąś inną.

komentarz 15 kwietnia przez Mist Obywatel (1,030 p.)
Chętnie bym pomógł jednak dopiero zamierzam uczyć się Java na razie mam zajęcie ;)

2 odpowiedzi

+1 głos
odpowiedź 15 kwietnia przez Wiciorny Ekspert (272,150 p.)

Ten kod który napisałeś nie ma całkowicie sensu, gdyż tak naprawdę, przerwanie pętli następuje przez zwykły break. 
A nie przez zmienna 

 boolean active = true;
 

ta zmienna nie jest nawet widoczna po za tą funkcją, jest to zmienna lokalna, więc jak napiszesz prostą logikę nawet, po prostu zwrócisz z funkcji false/true... to wyjdzie na to samo, twoja pętla przerwyana jest tylko i wyłącznie dlatego, że "twój warunek" 

 

   if(!example()) break;

kończy działanie pętli while. i nic po za tym.
Programiści takich rzeczy nie robią, bo jest to czysto dziwacznie i niepotrzebnie napisany kod.  Tworzysz zależność funkcji zewnętrznej od wewnętrznej co troszkę przeczy idei i powinno być odwrotnie, niemniej jednak, twoja funkcja wpływająca na pewne warunki po prostu może być funkcją która robi coś innego, a jej rezultat zakończy działanie, nie ma potrzeby definiowania wewnętrznego argument true/false... bo jak wspomniałem liczy się tlyko i wyłącznie to co funkcja zwróci, a zwrócić musi  boolean. 

Czemu to nie ma sensu ?

Bo nie masz wpływu na sterowanie wewnętrznej metody, po raz uruchomionym kodzie i programie, twoja funkcja nawet nie przyjmuje parametrów.  Więc działanie jest zawsze takie samo - dla zachardkowdowanych danych, a zmienna jest widoczna tylko i aż w ciele tej jednej funkcji example(). 

Po drugie niczym się to nie rózni niż proste : 
 

    public static void main(String[] args) {
        while (isActive()) {
            // kod który się ma jakiś czas wykonywać
        }
    }
    
    public static boolean isActive() {
         // mozna zwrocić false, jak chcesz zakończyć działanie. Lub inną logikę opartą o proste warunki które nie potrzebują dodatkowej zmiennej active. 
        return true; 
    }

bez zbędnych rzeczy, nie potrzebujesz mieć zmiennej active nawet jeśli we funkcji następuje decyzja czy będzie false/czy true, bo możesz to zrwrócić po prostu bezpośrednio z funkcji przez proste warunki. 


Jednak po prostu takie rzeczy rozwiązuje się w ramach tej samej funkcji : 

Kończysz sterując w tej samej metodzie, bo nic nie stoi na przeszkodzie, baaa... często zmienna jest częscią klasy... aby była zależna od obiektu. to znaczy z zewnątrz można było zmienić działanie funkcji. 
 

   public static void main(String[] args) {
        boolean active = true;

        while (active) {
           // jakas logika i jesli np cos jest spelnione to
            active = false
        }
    }

 

komentarz 16 kwietnia przez Jacek0325 Obywatel (1,070 p.)

Dzięki za odpowiedź. Trochę mi ona rozjaśniła wątpliwości.

Tworzysz zależność funkcji zewnętrznej od wewnętrznej co troszkę przeczy idei i powinno być odwrotnie, niemniej jednak, twoja funkcja wpływająca na pewne warunki po prostu może być funkcją która robi coś innego, a jej rezultat zakończy działanie, nie ma potrzeby definiowania wewnętrznego argument true/false... bo jak wspomniałem liczy się tlyko i wyłącznie to co funkcja zwróci, a zwrócić musi boolean.

Myślę, że ogólnie zrozumiałem, o co Ci chodzi, ale tych słów trochę nie rozumiem. Rzeczywiście czuję to, że lepiej robić zależność funkcji wewnętrznych od zewnętrznych, nie odwrotnie. Nie rozumiem słów “liczy się tylko i wyłącznie to co funkcja zwróci, a zwrócić musi boolean”. Przecież jeżeli w ciele funkcji będzie np. System.out.print(), to zostanie to wyświetlone w programie, więc to też będzie się liczyć. Pewnie chodzi Ci o coś innego, ale nie zakumałem.

Drugie pytanie: czy ja, pisząc kod w taki sposób, uprawiam hardkodowanie? Pierwszy raz się spotykam z tym terminem.

0 głosów
odpowiedź 16 kwietnia przez VBService Ekspert (254,490 p.)
1
komentarz 17 kwietnia przez Jacek0325 Obywatel (1,070 p.)

Dzięki, poczytałem sobie yes Generalnie chyba rozumiem o co chodzi, w pewnych szczegółach muszę się jeszcze odnaleźć.

Podobne pytania

0 głosów
3 odpowiedzi 3,488 wizyt
+1 głos
1 odpowiedź 194 wizyt
pytanie zadane 1 sierpnia 2021 w JavaScript przez mgab Nowicjusz (160 p.)
0 głosów
1 odpowiedź 89 wizyt
pytanie zadane 2 marca 2019 w C i C++ przez piotruchk Nowicjusz (170 p.)

92,674 zapytań

141,577 odpowiedzi

320,046 komentarzy

62,038 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...