Open makeros opened 4 years ago
Cześć @makeros,
czy dozwolone jest używanie zewnętrznych bibliotek w projektach?
Hej @karlosos Można używać. Pytanie czy czasami ma to sens ;) Czasami lepiej użyć natywnego rozwiązania ale prosto niż źle użyć zewnętrznej biblioteki ale działa ;) A czego chciałbyś użyć?
Chodzi o drugi problem z kolejnością wykonywania działań. Mam taką wizję, że użytkownik będzie wprowadzać dane, np. 2+2/2^3*2√5
i ten ciąg znaków będzie trzeba sparsować na działania.
Mógłbym użyć biblioteki https://mathjs.org/docs/expressions/expression_trees.html i przerobić moje wyrażenie na 2+2/2^3*5^(1/5)
i takiego stringa przekazać do math.eval('2+2/2^3*5^(1/5)')
co da mi od razu wynik.
W przeciwnym razie musiałbym użyć tego algorytmu https://en.wikipedia.org/wiki/Shunting-yard_algorithm#Detailed_example na danych wejściowych 2+2/2^3*2√5
.
Trzecią możliwością jaką widzę jest to sparsowanie do postaci odpowiedniej dla eval: eval('2+2/Math.pow(2, 3)*Math.pow(2, 1/5')
. To byłoby najprostsze rozwiązanie, ale zarazem niebezpieczne. W dokumentacji mdn nie przekonują do używania https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#Never_use_eval! 😬
Chociaż po krótkim namyśle jednak zdecyduję się na rozwiązanie z eval
. Przetestowałem i działa :). W razie potrzeby zawsze będzie można podłączyć bibliotekę mathjs.
W sumie możesz użyć biblioteki.
Eval jest zły ale jak się go używa w specyficznych przypadkach. Np. gdy evalem wykonujemy u użytkownika kod pochodzący od osoby trzeciej.
Nie mniej jednak sam eval powinien wystarczyć.
Ale analizowanie całego zapisu użytkownika (bez używania evala) po kliknięciu '=' nie powinno być specjalnie skomplikowane ;)
Zawsze najlepiej wybrać najprostsze działające rozwiązanie :)
Hej. Zapraszamy do zadania nr 2 https://gist.github.com/makeros/30bcd431291e34dc0c6dd3b9c8dfe888