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
Nelze.
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 šlo nějak využít, že + a + = +, + a - = -.
Pokud myslis eval String (treba "5+4"), tak to v Java lze treba pres zavolani JS engine....
https://stackoverflow.com/questions/2605032/is-there-an-eval-function-in-java
A taky je potřeba dodat B - tedy že výkon půjde do kytek.
To uz davno nemusi byt pravda... (GraalVM)
Promiňte, ale jak to použiju? Java 15 to očividně má, ale přesto mně NetBeans nenabízí žádný import, pokud tuto třídu použiju.
Prave v JDK15 byl Nashorn Engine z JDK odstranen. Coz jsem ani nevedel, ze bylo v planu...
Nicmene Wikan ma pravdu, ja bych to taky nepouzival. To uz radeji nejakou tu java knihovnu. Pripadne lepe popis jaky mas presne problem...
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épe.
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);
Díky, ale nejlepší asi bude způsob uvedený níže ohledně násobení +1 a -1.
Bez podmínky stačí pouze funkce addition a buď vložit -number2 anebo jako třetí argument zadat +1 či -1 a vynásobit s ním number2.
Díky. Souhlasím, to bude asi nejlepší způsob.
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
I přesto děkuji.
Pořád jsem nepochopil, k čemu je to dobré a v čem je to lepší než prosté sčítání či odečítání.
Prostě, přijde mně zbytečné, abych vyhodnocoval podmínku jenom kvůli použití správné operace.
Tak radši použiješ pomalejší, hůře čitelný a na chyby velmi náchylný způsob. No máš velice zvláštní přístup k problémům.
Myslel jsem, že největší zlo jsou podmínky. (Teda tak jsem to četl long time ago). A o kolik složitější je a + b vs a + (c * b)?
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 by mě zajímalo, kde na takový věci chodíš.
O moc složitější to není. Ale nepřináší to žádnou výhodu.
Nejde mně o výhodu, ale o lepší zápis. A cyklus není nic jiného než hromada podmínek.
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)...
Pravděpodobně je zápis s IntBinaryOperator lepší, protože je z toho jasné, k čemu slouží.
A nedělám to pro žádnou firmu. A co se týče názvů, mně osobně vždy přišel mnohem čitelnější název s hadem než velbloudem.