• 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ę :)

VPS Starter Arubacloud
+2 głosów
929 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 116 wizyt
pytanie zadane 5 listopada 2019 w Nasze projekty przez Paweł Antyporowicz Stary wyjadacz (11,470 p.)
0 głosów
0 odpowiedzi 340 wizyt
0 głosów
1 odpowiedź 267 wizyt
pytanie zadane 8 października 2020 w JavaScript przez nudziarz Nowicjusz (120 p.)

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...