RPN Library

0

Cześć Wszystkim.
Parę lat temu, (2011) po przeczytaniu Książki J. Blocha pt. "Java. Efektywne programowanie.", postanowiłem napisać coś, co używałoby konwencji z tej książki.
Tak powstała Biblioteka RPN (Odwrotna notacja Polska) dla Javy. Traktowałem to jako takie dzieło "do szuflady" - nigdy nikomu nie pokazać, traktować, jako projekt doświadczalny, hobby.
Dzisiaj po 5 latach dorosłem do tego aby ją wam udostępnić :).
Tak więc zapraszam do ściągania, używania, komentowania.

https://github.com/bartlomiej-gora/RPNLibrary/releases

Pozdrawiam.

1
  1. Skąd nazwa klasy RPNChecking? (w sensie: skąd wziął się tutaj nagle gerund, skoro wszędzie masz np. executioner).
  2. Nazwa RPNChecking::isLeftAssociativity(String c) jest błędna: czy jest lewo asocjacyjność? Prędzej isLeftAssociative(String operator).
  3. Osobiście bardzo nie podoba mi się przekazywanie wszędzie stringów jako nazw funkcji, zmiennych czy operatorów.
  4. Daruj sobie komentarze w stylu Return paramCount value - nie zwiększają one czytelności kodu, ergo: są zbędne (jeśli Twoje IDE je generuje z automatu, wyłącz tę funkcję).
  5. Podobnie z // Iteration throght input String. - komentować powinieneś tylko to co jest nieczytelne (czyli poza nagłówkami funkcji, komentarze powinny idealnie nie występować).
  6. Skąd wziąłeś podział na "zaawansowaną część" (katalog advanced)? Co jest "zaawansowane", a co nie jest, oraz dlaczego?
  7. Zupełnie nie rozumiem, dlaczego konstruktor klasy SinusRPNFunction przyjmuje liczbę parametrów (parametr paramCount). Jeśli ustawię to na 2, to magicznie będzie możliwe policzenie sinusa z dwóch liczb? Nie, nie będzie możliwe - zatem ten parametr jest zbędny, ponieważ klasa już sama z siebie wie, co powinna tam przekazać.
  8. Jeśli już robić coś takiego "większego", to lepiej trzymać się z dala od odwrotnej notacji polskiej ;-) Parsery są moim zdaniem ciekawym tematem, gdzie można bardziej się popisać.
    PS Left bracket oil (and right too), End of entry, Calculates RPN String into BigDecimal., - to jest po angielsku napisane chociaż? Brzmi niesamowicie hindusko.
0

Hej Dzięki za recenzje:
ad 1) Checking, bo Iterfejsy powinny określać działanie (czasownik) więc klasa implementująca Checking (czasownik) jest klasą, odpowiedzialną za sprawdzanie
ad 2) isLeftAssociativity - lewo-łączność :) (https://translate.google.pl/#en/pl/Associativity)
ad 3) podaj przykład proszę, albo swój przykład jak ty byś to zrobił.
ad 4) fakt, oryginał był robiony w eclipsie, a te klasy są w trakcie.
ad 5) o dzięki tego nie zauważyłem.
ad 6) no właśnie to są nowe klasy, które będą pozwalać ( w przyszłości) na łatwiejsze dodawanie własnych funkcji, np. będziesz mógł sobie extendowac po AbstractRPNArithmeticFunction i np. dodać sinus, tg, fib, czy co tam chcesz. dlatego jest advanced, bo jest rozszerzeniem podstawowego.
ad 7) Ok. Potrzebuję liczby parametrów danej funkcji dla executionera. Dzięki temu executioner.executeFunction wiem ile liczb zdjąć ze stosu.
ad 8) A to literówka chyba :/

Dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1