Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Java - Použití parametru metody jako matematického znaku

Dobrý den,

Vytvořil jsem tenhle příklad

public class MathematicalOperatorInParameter {

    public static void main(String[] args) {
        System.out.println(addition_or_subtraction(100, 50, true));
        System.out.println(addition_or_subtraction(100, 50, false));
    }

    public static int addition_or_subtraction(int number, int number2, boolean addition) {
        if (addition) {
            return number + number2;
        } else {
            return number - number2;
        }

    }
}

Jde o to, že mně přijde zbytečné používat podmínku jenom kvůli operátoru. V tomhle případě to asi nevadí, ale pokud bude výpočet čísel mnohem složitější, tak bude nepřehledné to tam psát dvakrát.

Proto se chci, prosím Vás, zeptat, jestli je možné použít parametr jako operátor?

Děkuji

Předmět Autor Datum
Nelze.
MaSo 07.04.2021 16:43
MaSo
Myslel jsem něco jako napsat to jako řetězec a následně převést na operátor? Navíc, nevím jestli by…
MichalDM 07.04.2021 16:47
MichalDM
Pokud myslis eval String (treba "5+4"), tak to v Java lze treba pres zavolani JS engine.... https:/…
MaSo 07.04.2021 16:50
MaSo
A taky je potřeba dodat B - tedy že výkon půjde do kytek.
Wikan 07.04.2021 16:51
Wikan
To uz davno nemusi byt pravda...:-) (GraalVM)
MaSo 07.04.2021 16:54
MaSo
Promiňte, ale jak to použiju? Java 15 to očividně má, ale přesto mně NetBeans nenabízí žádný import,…
MichalDM 07.04.2021 17:39
MichalDM
Prave v JDK15 byl Nashorn Engine z JDK odstranen. Coz jsem ani nevedel, ze bylo v planu...:-) Nicme…
MaSo 07.04.2021 17:57
MaSo
To nejde. A ani mě nenapadá důvod, proč by to jít mělo. To co řešíš, se určitě dá vyřešit mnohem lép…
Wikan 07.04.2021 16:51
Wikan
Binárny operátor si môžeš poslať ako parameter: BinaryOperator<T> binaryOperator; Prípadne, keď sú t…
moose 08.04.2021 07:51
moose
Díky, ale nejlepší asi bude způsob uvedený níže ohledně násobení +1 a -1.
MichalDM 08.04.2021 16:52
MichalDM
Bez podmínky stačí pouze funkce addition a buď vložit -number2 anebo jako třetí argument zadat +1 či…
hynajs 08.04.2021 10:28
hynajs
Díky. Souhlasím, to bude asi nejlepší způsob.
MichalDM 08.04.2021 16:51
MichalDM
Omlouvám se, zapomněl jsem to uzavřít. Jak už bylo víceméně řečeno, rozlišit sčítání a odčítání lze…
MichalDM 22.04.2021 20:11
MichalDM
Pořád jsem nepochopil, k čemu je to dobré a v čem je to lepší než prosté sčítání či odečítání.
Wikan 22.04.2021 20:14
Wikan
Prostě, přijde mně zbytečné, abych vyhodnocoval podmínku jenom kvůli použití správné operace.
MichalDM 22.04.2021 20:28
MichalDM
Tak radši použiješ pomalejší, hůře čitelný a na chyby velmi náchylný způsob. No máš velice zvláštní…
Wikan 22.04.2021 20:32
Wikan
Myslel jsem, že největší zlo jsou podmínky. (Teda tak jsem to četl long time ago). A o kolik složitě…
MichalDM 22.04.2021 20:55
MichalDM
Mám dojem, že jsi před časem říkal to samé o cyklech. Že je to zlo, a že by ses jim měl vyhýbat. To…
Wikan 22.04.2021 21:53
Wikan
Nejde mně o výhodu, ale o lepší zápis. A cyklus není nic jiného než hromada podmínek.
MichalDM 22.04.2021 23:24
MichalDM
Jenze tim, "lepsim" zapisem sis akorat sprasil API. To uz jsi mel pouzit radeji zapis od Losa... Ja…
MaSo 23.04.2021 06:30
MaSo
Pravděpodobně je zápis s IntBinaryOperator lepší, protože je z toho jasné, k čemu slouží. A nedělám… poslední
MichalDM 23.04.2021 16:14
MichalDM

Binárny operátor si môžeš poslať ako parameter: BinaryOperator<T> binaryOperator;
Prípadne, keď sú to len čísla typu int, tak rovno IntBinaryOperator.

Napr.:
final IntBinaryOperator addition = (a, b) -> a + b;
final IntBinaryOperator subtraction = (a, b) -> a - b;

V metóde potom len aplikuješ: return binaryOperator.apply(number, number2);

Omlouvám se, zapomněl jsem to uzavřít. Jak už bylo víceméně řečeno, rozlišit sčítání a odčítání lze jednoduše pomocí násobení parametrem +1 nebo - 1

public class MathematicalOperatorInParameter {

    public static void main(String[] args) {
        System.out.println(addition_or_subtraction(100, 50, 1));
        System.out.println(addition_or_subtraction(100, 50, -1));
    }

    public static int addition_or_subtraction(int number, int number2, int operation) {
        return number + (operation * number2);
    }
}

I přesto děkuji.

Jenze tim, "lepsim" zapisem sis akorat sprasil API. To uz jsi mel pouzit radeji zapis od Losa...

Jak bude tvuj lepsi zapis fungovat, kdyz ho nekdo zavola s parmetrem operation -2, 200000000 nebo treba 0? Bude to delat to, co je v nazvu metody?

Jen doufam, ze nedelas komercni veci na kterych pracuje vice vyvojaru, protoze vytvaris solidni paskvily (napr. ty vecne podtrzitka v nazvech metod)...:-)

Zpět do poradny Odpovědět na původní otázku Nahoru