Autor | Zpráva | ||
---|---|---|---|
Ten levej Profil * |
#1 · Zasláno: 9. 3. 2015, 15:57:01
Cau, potreboval bych vedet jestli se dá uložit operátor do proměnné a pak použít v početní operaci.
Např: var operator = "+"; var operace = 3+operator+2; Kdyz si to pak vypisu tak mi to hodi 3+2, ale ja chci aby to hodilo 5. Diky |
||
juriad_ Profil * |
#2 · Zasláno: 9. 3. 2015, 16:12:22
Primo ne. Ale muzes si napsat funkci.
var plus = function(a,b) {return a+b;} var operace = plus(2, 3); // 5
|
||
Ten levej Profil * |
#3 · Zasláno: 9. 3. 2015, 16:19:38
Jo to by slo, diky.
|
||
xROAL Profil |
Šlo by to s použitím evalu, avšak treba byť opatrný v tom, čo si do premenných pustíš.
Eval vykoná akýkoľvek kód, ktorý mu dáš ako keby je to Našiel som iný spôsob, ktorý vyzerá podstatne bezpečnejšie: function add(a, b) { return a + b; } function multiply(a, b) { return a * b; } function divide(a, b) { return a / b; } var operations = { '+': add, '*': multiply, '/': divide }; var a = 2; var b = 5; var operation = '+'; alert(operations[operation](a, b)); Upravené. Už je to v JS a nie PHP. Ospravedlňujem sa, asi som sa moc ponáhľal. |
||
juriad_ Profil * |
#5 · Zasláno: 9. 3. 2015, 16:25:34
xROAL:
Bavime se tu o JS, ale nastesti tvuj prispevek je platny jen s minimalnimi zmenami. Ta nejvetsi je, ze v poli $operations by byly primo ty funkce a ne jen jejich nazvy. |
||
xROAL Profil |
#6 · Zasláno: 9. 3. 2015, 16:37:22
juriad:
Pardon, to som si nejako vôbec neuvedomil a hneď som Googlil možnosti v PHP. Upravím pôvodný príspevok. |
||
Joker Profil |
#7 · Zasláno: 9. 3. 2015, 17:18:13
xROAL [#4]:
ad eval: Kromě uvedených nevýhod navíc pro něco na způsob kalkulačky eval ani není vhodný, protože jakmile mi přestane stačit +, -, *, /, nastanou potíže. Jinak je otázka, jestli ten způsob s uložením funkce do proměnné má výhody proti klasickému řešení: function vypocet(prvni, druhy, operator) { switch (operator) { case "+": return prvni + druhy; case "-" : return prvni - druhy; case "*": return prvni * druhy; case "/": return prvni / druhy; } } var a = 2; var b = 5; var operation = '+'; alert(vypocet(a, b, operation); Tohle mi pro méně složité situace připadá snadné a přehledné. Většinou asi nebude třeba to moc překombinovávat. I když by určitě šlo vyrobit „enterprise“ řešení se sadou tříd implementujících rozhraní IOperation a třídou OperationFactory :-) |
||
1Pupik1989 Profil |
#8 · Zasláno: 9. 3. 2015, 19:57:45
Já bych to řešil přes prototype.
Number.prototype.add = function(b){ return this+b; }; Number.prototype.sub = function(b){ return this-b; }; Number.prototype.multiply = function(b){ return this*b; }; Number.prototype.divide = function(b){ return this/b; }; var result = (5).add(8).multiply(2); alert(result); |
||
Chamurappi Profil |
Reaguji na 1Pupika1989:
Já ne. Přišlo by mi to trošku praštěné :-) Tvůj kód ukazuje, jak by šlo nahradit standardní matematické operátory, ale nikoliv, jak určit matematickou operaci pomocí jiné proměnné. To by se dělalo takto: var operaceA = "add"; var operaceB = "multiply"; var result = (5)[operaceA](8)[operaceB](2); Reaguji na xROALa: „Šlo by to s použitím evalu“ Cituji: „If the argument is an expression, eval() evaluates the expression. If the argument is one or more JavaScript statements, eval() executes the statements.“ – to není pravda, žádné rozhodování mezi příkazy a výrazy se neděje. Argument je vždy vyhodnocený, jako kdyby to byl celý skript. |
||
Časová prodleva: 10 let
|
0