Aktywne Wpisy

Obiboq +79
klewerewel +10
#zwiazki #rozowepaski #logikarozowychpaskow #blackpill #p0lka #polska
Kobiety nie są codziennie zaczepiane na ulicy z propozycjami randek jak przegrywom się wydaje w ich łbach. Nie mają zapchanych skrzynek z propozycjami randek za 15 tysięcy dolarów. Przegrywy myślą że każda kobieta wiedzie życie jak celebrytka z instagrama.
W moim 25 letnim życiu mężczyźni "podrywali" mnie ok. 10 razy, czyli średnio raz na 2 lata.
Polska to nie Hiszpania. Polacy nie potrafia podrywac kobiet.
-
Kobiety nie są codziennie zaczepiane na ulicy z propozycjami randek jak przegrywom się wydaje w ich łbach. Nie mają zapchanych skrzynek z propozycjami randek za 15 tysięcy dolarów. Przegrywy myślą że każda kobieta wiedzie życie jak celebrytka z instagrama.
W moim 25 letnim życiu mężczyźni "podrywali" mnie ok. 10 razy, czyli średnio raz na 2 lata.
Polska to nie Hiszpania. Polacy nie potrafia podrywac kobiet.
-





Stworzyłem swój pierwszy "troszeczkę bardziej" rozbudowany programik obiektowy służący do walidacji danych nowego klienta banku. Generalnie nie chodzi o samą walidację, bo kilku mechanizmów brakuje, np. jak się poda hasło ze spacją, to akceptuje. Chodzi mi raczej o nakierowanie, czy sama struktura programu obiektowego jest poprawna. Co zmienić, dobre praktyki itp... jakiś wzorzec może byłoby lepiej tu zastosować, a może nie...
https://github.com/VanQator/bankAccount
Inne sprawy:
- w cpp jest raczej konwencja, że
for (int i = 0; i < name.length(); i++){
if (name.length() == 0)
Ten kawałek kodu to oksymoron. Gdy name.length() == 0 to nigdy nie wejdziemy do pętli
pirmo - dla nowego moze to byc upierdliwe i zbyteczne, ale nie mieszac logiki z wyswietlaniem to kiedys zaprocentuje i sam sobie bedziesz chcial obciagnac za tak genialne rozwiazanie
drugie - uzywaj wiecej std, w wiekszosci przypadkow bo to jest piekne, zgrabne i wiekszosci przypadkow jak juz pisalem wydajne np. twoja walidaje tutaj https://github.com/VanQator/bankAccount/blob/master/validBalance.cpp#L10 mozna zastapic pieknym 1 linijkowcem:
bool isValid = find_if(str.begin(), str.end(), is_not_alnum_space) == str.end();po trzecie -
Takie podejście umożliwia rozszerzalność aplikacji w postaci np. dodania GUI bez znacznych zmian w głównej logice.
Może to być np. klasa reprezentująca problemy w walidacji - w sensie może to być typ złożony, który przenosi jeszcze dodatkowe informacje, albo nawet prosty Enum jak ci się podoba.
możesz zrobić to na 2 sposoby:
1, tradycyjnie w C++, rzucasz w środku konstruktora wyjątek i łapiesz go:
ValidBalance readBalanceFromStdin() {
while(true) {
cout << "Enter correct name.\n";
cout << "Can't be empty.\n";
cout << "Contain only alphabetic characters.\n\n";
cout << "Enter: ";
std::string input;
cin >> input;
try {
return ValidBalance(input)
} catch (std::domain_error const& e) {
cout << "Bad input: " << e.what();
}
}
}
2, w
@Saly: puściłem pawia
Osobny plik nagłówkowy i .cpp dla każdej z klas jest zdecydowanie lepszym rozwiązaniem.
A poza tym to co pisali poprzednicy - oddziel IO od logiki.
Ja zawsze byłem bojownikiem pisania '{' linijkę niżej, ale o ile to Twój mały projekt, to tylko i wyłącznie kwestia Twoich preferencji - tym niemniej bądź
ValidBalance balance = readValidBalanceFromStdin();
...
...
...
Account account(balance, .....)
Funkcja readValidBalanceFromStdin wygląda jak w poprzednim komentarzu. W tej funkcji masz pętle while, z której da się wyjść tylko wtedy, gdy konstruktor ValidBalance nie rzuci wyjątku (return ValidBalance(input)). W innym wypadku wracamy na począte funkcji, więc nie ma opcji, żeby Account nie powstał, bo przepływ programu nie dojdzie tam, jeżeli funkcja readValidBalanceFromStdin nie zwróci wartości
try {
ValidBalance balance("sdfsdf");
Account account(balance .... );
} catch (std::domainerror const& e) {
std::cout << e.what();
}
jeżeli konstruktor ValidBalance rzuci wyjątek to nie przejdziesz do następnej lini, tylko do klauzuli catch, więc account nie będzie miał śmieciowego pola balance, ponieważ sam konstruktor Account nigdy się nie odpali