Ocena kodu początkującego

0

Witam,
jako że, moja obecna branża nie jest związana z klepaniem kodu i nie posiadam znajomych programistów, prosiłbym o wskazanie błędów, zasugerowanie dobrych praktyk oraz złych. Pisząc program zapomniałem, że SPOJ przyjmuję tylko jeden plik a napisałem w kilku klasach. Dla zweryfikowania programu przerobię to na jeden plik, aczkolwiek przykład zamieszczony w zadaniu u mnie również działa, krótko mówiąc proszę o konstruktywną krytykę.

Opis zadania:
https://pl.spoj.com/problems/WI_IDEN/
Projekt:
https://github.com/JakubSto/SPOJ-WI_IDEN-4797-

0

Zadania na SPOJ to średni materiał do oceny, można się co najwyżej do pierdół przyczepić, a wyrzeźbienie z nich czegoś obiektowego stanowi nie lada wyzwanie (i nie jest celem tych zadań). Sam fakt, że zamiast jednej klasy masz kilka nie powoduje natychmiastowego wzrostu jakości, clean code czy czegokolwiek. Jak już piszesz taki kod to mógłbyś się pokusić o lepsze testy niż "na jednym przykładzie działa". Fajnie, jakby to były testy typu QuickCheck.
Z konkretów to:

    static boolean finished (String words, int chars){
        if (words.length() <= chars){
            return true;
        }
        return false;

jest o trzy linijki za długa.

Poza tym nie bez powodu przyjęło się, że nazwy klas bierzemy od rzeczowników - to są obiekty. U Ciebie nie ma obiektów - opakowujesz funkcję w klasę i udajesz, że to ma sens.

0
Saalin napisał(a):

Zadania na SPOJ to średni materiał do oceny, można się co najwyżej do pierdół przyczepić, a wyrzeźbienie z nich czegoś obiektowego stanowi nie lada wyzwanie (i nie jest celem tych zadań). Sam fakt, że zamiast jednej klasy masz kilka nie powoduje natychmiastowego wzrostu jakości, clean code czy czegokolwiek. Jak już piszesz taki kod to mógłbyś się pokusić o lepsze testy niż "na jednym przykładzie działa". Fajnie, jakby to były testy typu QuickCheck.
Z konkretów to:

    static boolean finished (String words, int chars){
        if (words.length() <= chars){
            return true;
        }
        return false;

jest o trzy linijki za długa.

Bardziej chodziło mi o to, że przykład sprawdza wszystkie przypadki więc algorytm działa. Nie mam pojęcia czym jest QuickCheck - postaram się o tym poczytać.

>     static boolean finished (String words, int chars){
>         return (words.length() <= chars);
> 

tak będzie dobrze?

Poza tym nie bez powodu przyjęło się, że nazwy klas bierzemy od rzeczowników - to są obiekty. U Ciebie nie ma obiektów - opakowujesz funkcję w klasę i udajesz, że to ma sens.

rozumiem dziękuję

1

Jedne zbędne nawiasy, ale tak, jest lepiej.
http://hackage.haskell.org/package/QuickCheck - ale w różnych językach są podobne biblioteki do testowania własności, które spełnia program.

0
Saalin napisał(a):

Jedne zbędne nawiasy, ale tak, jest lepiej.

Bardziej nie umiem, nie znam składni, możesz pokazać?

http://hackage.haskell.org/package/QuickCheck - ale w różnych językach są podobne biblioteki do testowania własności, które spełnia program.

dzięki za link

0

Po prostu bez nawiasów niepotrzebnych.

 static boolean finished (String words, int chars) {
     return words.length() <= chars;
 }
0

Wracając do wcześniejszych słów o przykładach z SPOJa:

Zadania na SPOJ to średni materiał do oceny, można się co najwyżej do pierdół przyczepić, a wyrzeźbienie z nich czegoś obiektowego stanowi nie lada wyzwanie (i nie jest celem tych zadań).

Mam problem ze znalezieniem sobie zadania praktycznego, które mógłbym wykonać, poćwiczyć, itd . Polecono mi również stronę CodeWars, ale zadania tam zawarte są dla mnie jeszcze nie zrozumiałem i zbyt trudne.

0

Wpisz w Google "pro/g/ramming challenges".

0

Zamiast

if (words.charAt(i) == 'a' || words.charAt(i) == 'ą' || words.charAt(i) == 'e' || words.charAt(i) == 'ę'|| words.charAt(i) == 'i'
                    || words.charAt(i) == 'o' || words.charAt(i) == 'u' || words.charAt(i) == 'ó' || words.charAt(i) == 'y')

można zrobić

        List<Character> vowels = List.of('a', 'ą', 'e', 'ę', ...);
        if (vowels.contains(words.charAt(i))) {
            //...
        }

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