• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Konwerter ceny do postaci słownej - wystawiam na krytykę :)

Object Storage Arubacloud
+2 głosów
984 wizyt
pytanie zadane 22 lipca 2017 w Nasze projekty przez Tomek Sochacki Ekspert (227,510 p.)

Witam,

jestem w trakcie projektowania dla jednego klienta aplikacji w node, w której stanąłem przed problemem pobrania kwoty w postaci np. "120.50" i przekonwertowania jej na postać słowną ("sto dwadzieścia złotych pięćdziesiąt groszy").

Udało mi się rozwiązać ten problem, i przy okazji postanowiłem stworzyć swój pierwszy publiczny projekt NPM, dostępny pod linkiem: price-to-polish-words

Do testowania kodu wykorzystuję w projekcie Mocha+chai więc i ten moduł otrzymał testy w tej technologii (testy są dostępne w module).

price-to-polish-words przyjmuje kwotę jako Number lub String i konwertuje są do odpowiednio ustawionej postaci słownej. W kodzie zaimplementowałem kilka możliwości prezentacji słownej gdyż tego wymaga moja aplikacja (muszę zapewnić możliwość konfigurowania sposobu wyświetlania kwot).

 

Może komuś kiedyś się przyda "takie coś" :) a jeśli ktoś miałby ochotę zerknąć w kod to chętnie wysłucham konstruktywnych uwag i krytyki co dodać, zmienić itp. Nie muszą to być uwagi stricte do algorytmów, chętnie nawiążę również dyskusję np. na temat formatowania kodu (i ewentualnych zmian w moich ustawieniach ESLint) itp.

Pozdrawiam,

Tomek

komentarz 23 lipca 2017 przez obl Maniak (51,280 p.)
Coś podobnego w Qt pisałem do zamiany kwoty na słowną postać chociaż bez tak zaawansowanego formatowania.

1 odpowiedź

+2 głosów
odpowiedź 22 lipca 2017 przez ScriptyChris Mędrzec (190,190 p.)
wybrane 23 lipca 2017 przez Tomek Sochacki
 
Najlepsza

https://github.com/drogimex/priceToPolishWords/blob/master/priceToPolishWords.js#L36

W pętlach for..of oraz for..in nie zmieniasz (raczej) wartości zmiennej, więc można używać const. W "zwykłych" pętlach for, czy while / do..while zmienia się iterator (i++, i += 1 itd.), więc tam const nie przejdzie.

https://github.com/drogimex/priceToPolishWords/blob/master/src/setPriceFormat.js#L23

https://github.com/drogimex/priceToPolishWords/blob/master/src/setPriceFormat.js#L57

https://github.com/drogimex/priceToPolishWords/blob/master/src/numberToWords.js#L67

https://github.com/drogimex/priceToPolishWords/blob/master/src/ConvertMethods.js#L75

https://github.com/drogimex/priceToPolishWords/blob/master/src/ConvertMethods.js#L95

Tam możesz użyć const. Mogłem też przeoczyć jakieś miejsca, ale jeśli nie przypisujesz ponownie jakiejś wartości do tej samej zmiennej, tylko ją mutujesz - czyli operujesz na obiektach, to stosuj const. Tak samo, jeśli tworzysz "stały string", np. jako klucz do tłumaczenia.

https://github.com/drogimex/priceToPolishWords/blob/master/src/priceToArray.js#L30

W takich momentach, czytelność kodu moim zdaniem spada. Podobnie, jak w innej dyskusji na forum: https://forum.pasja-informatyki.pl/271101/fukcja-z-tablicami?show=271107#a271107

Lepiej, przy arrow function jednak otoczyć parametr nawiasami i przy tworzeniu łańcuszka wywołań użyć klamer. Za bardzo kodu nie rozbudowujesz, a mimo wszystko czytelność wzrasta.

https://github.com/drogimex/priceToPolishWords/blob/master/src/numberToWords.js#L25

Tutaj też IMO troszkę za bardzo "one liner":

komentarz 22 lipca 2017 przez Tomek Sochacki Ekspert (227,510 p.)
i o takie coś mi chodziło, wielkie dzięki kolego :)

Co do const to spuszczam głowę i przyznaję całkowitą rację. Nie wiem dlaczego, ale jakoś zafiksowałem się na tym "let" i nie mogę odpuścić, mimo iż zdaję sobie sprawę z tego jak dokładnie działa const, a jak let (nawet pisałem o tym posta na swoim blogu.. :) ale na pewno to poprawię, żeby wyrobić sobie lepsze nawyki.

Co do tej czytelności to szczerze mówiąc są to pewne nawyki po nauce JS na platformie CodeWars, gdzie zrobiłem wiele zadań i w części wymagane było użycie jak najmniejszej liczby znaków i stąd wyrobiłem sobie nawyk tych wywołań liniowych i arrow function, ale już Comandeer niedawno zwracał mi na to uwagę i powolutku pracuję nad tym :)
komentarz 22 lipca 2017 przez ScriptyChris Mędrzec (190,190 p.)
Też lubię skracać kod, ponieważ można wtedy lepiej poznać quirki języka. Lecz przesadzanie ze skrótowcami zmniejsza czytelność kodu na tyle, że albo ja sam po jakimś czasie mam problem z szybkim zrozumieniem "o co tu chodzi", albo ktoś inny spogląda i się pyta "kto to pisał?!". Więc przyjąłem metodę - dla zabawy, z ciekawości i "for sake of science" czasami dłużej pobawię się jakąś funkcją, żeby zobaczyć jak bardzo mogę ją skrócić. Jednak ostatecznie ("na produkcję") staram się zostawić ją w czytelnym stanie.

Podobne pytania

+1 głos
0 odpowiedzi 118 wizyt
pytanie zadane 5 listopada 2019 w Nasze projekty przez Paweł Antyporowicz Stary wyjadacz (11,470 p.)
0 głosów
0 odpowiedzi 357 wizyt
0 głosów
1 odpowiedź 291 wizyt
pytanie zadane 8 października 2020 w JavaScript przez nudziarz Nowicjusz (120 p.)

92,572 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...