Częste błędy (mistakes) w kodowaniu

Częste błędy (mistakes) w kodowaniu
Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
1

Niedawna sytuacja w Pascalu:

Kopiuj
Procedure foo(Obj: Objekt);
Begin
 Zrób_coś(Obj.coś_tam_co_modyfikuje_także_obiekt);
End;

I wielkie WTF, czemu po wyjściu z procedury foo obiekt zostaje zmodyfikowany, skoro nie dałem var przed nazwą :P
Poza tym jeszcze od czasu do czasu zdarza mi się robić:

Kopiuj
obiekt_a := obiekt_b

lub

Kopiuj
tablica_a := tablica_b

I zapominam, że w tej chwili obie zmienne wskazują na ten sam adres w pamięci...

PO
  • Rejestracja: dni
  • Ostatnio: dni
0

Zapomnienie średnika po definicji klasy w C++.

  • Rejestracja: dni
  • Ostatnio: dni
0

@pozytywista, skoro tak to chyba nigdy nie miałeś okazji korzystać z klas anonimowych i tworzyć ich instancji.

bolson
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Zielona Góra
1

Notoryczne zapominanie " : " w pythonie :[

Sarrus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2512
1
PS napisał(a):
Sterylizator napisał(a):

Już samym błędem, który karany powinien być obcinaniem jaj jest pisanie "var" zamiast konkretnego typu.

Ktoś tu nie dorósł do inferencji typów.

W przypadku jaki podał @Azarien używanie var jest słuszne, ale ja przywykłem do odczytywania typu po lewej stronie i jak widzę coś takiego:

Kopiuj
var aabbcc = GetSthFromAnotherThing();

to mnie krew zalewa. Owszem można sprawdzić definicję funkcji, albo też najechać na zmienną w VS, ale noż kurde czy np. 'string' zajmuje aż tyle miejsca? Jak jest 10 takich varów jeden pod drugim to staje się to mało wygodne.

  • Rejestracja: dni
  • Ostatnio: dni
3

Wiesz ze sa jezyki ktore nie maja wcale statycznego typowania? Polecam pobawienie sie takim jakims, zobaczymy co pozniej powiesz na temat pisaina typow wszedzie ;d

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
2

Mój ulubiony standardowy błąd popełniany systematycznie raz na pół roku niezależnie od języka, gdy potrzebny jest prawie identyczny fragment kodu, różniący się jakimiś detalami.
Robi się copy/paste i poprawia w odpowiednich miejscach. Problem w tym, że często zapomina się czegoś tam poprawić (jednej nazwy zmiennej, typu, itp) i potem marnuje się czas by znaleźć, gdzie się coś popsuło.

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2964
1

Ostatnio kilka razy złapałem się na czymś takim:

Kopiuj
def costam = {
  jakis kod 1
  jakis kod 2
  jakis kod 3
  if (warunek)
    wynik 1
  else
    wynik2
}

Teraz chcę zmodyfikować i dołożyć jeszcze jedną możliwość wyjścia z funkcji tak:

Kopiuj
def costam = {
  jakis kod 1
  if (nie mozna kontynuowac)
     jakis inny wynik
  jakis kod 2
  jakis kod 3
  if (warunek)
    wynik 1
  else
    wynik2
}

Oczywiście to jest źle, bo liczy się wynik ostatniego wyrażenia, a ten dodany wynik nie jest ostatnim wyrażeniem i program normalnie pójdzie sobie dalej zamiast wyjść z funkcji.
W Scali nie używa się return do zwracania wyników, tylko ostatnie wyrażenie jest zawsze wynikiem i nie trzeba pisać return. Stąd w pewnym momencie człowiek się przyzwyczaja i wydaje mu się, że jak napisze nieprzypisane do niczego wyrażenie nie na końcu, to że tam jest return. A tu zonk, bo wcale nie ma. :D

Żeby było ładnie, powinno być tak:

Kopiuj
def costam = {
  jakis kod 1
  if (nie mozna kontynuowac)
     jakis inny wynik
  else {
    jakis kod 2
    jakis kod 3
    if (warunek)
      wynik 1
    else
      wynik2
  }
}
matek3005
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 358
2

Mnie się zdarza "z automatu" napisać << zamiast >> przy strumieniach. Częstymi błędem początkujących programistów jest nieczytanie komunikatów kompilatora. Również niezdawanie sobie sprawy z różnicy między '\n', a "\n". Zapominanie o semantyce ścisłej własności przy użyciu auto_ptr.

Koziołek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Stacktrace
  • Postów: 6823
2

Kolejna rzecz, którą popełniają WSZYSCY CO NAJMNIEJ RAZ W ŻYCIU:

Kopiuj
public void initPerson(Person from){
   from = new Person();
}
//...
Person jaś;
initPerson(jaś);

przykrym dla Jasia jest fakt, że pomimo wywołania metody nadal nie istnieje.

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
11

Skończyłem pisać nową metodę, jestem z niej dumny, przechodzi wszystkie testy, jestem z niej jeszcze bardziej dumny, kompiluję, uruchamiam program i nowa metoda nie działa, nic się nie zmieniło... No tak, zapomniałem wywołać. :D

02
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1176
1

C++:
std::string s;
char x = 'a';
...
s += x + "bcde";

  • Rejestracja: dni
  • Ostatnio: dni
2

Rrrrwaa mać. Najczęstszy błąd to próba programowania w Javie jak w każdym normalnym języku. Tutaj wszystko indeksuje się od zera... poza argumentami format stringów. Ile razy muszę zrobić poprawki w javowej aplikacji to przy pierwszym bardziej rozbudowanym formatowaniu obowiązkowo obrywam NieLiczyszJakHumanistaException. Parszywe statycznie typowane PHP.

  • Rejestracja: dni
  • Ostatnio: dni
0
ubuntuser napisał(a)

jakby nie patrzeć jest to dobrze zrobione. Zerowy argument to format

Super, zawsze chciałem móc wypisać format stringa wypisując format stringa! Nie, to nie jest dobrze zrobione, wcale nie masz dostępu do formatu, po prostu składnia jest spierniczona po całości, to format stringi z C z dodaną pozycyjnością, po prostu 0 jako indeks kolidowałoby z zerowym paddingiem - http://ideone.com/yjD6y

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2964
0

Skończyłem pisać nową metodę, jestem z niej dumny, przechodzi wszystkie testy, jestem z niej jeszcze bardziej dumny, kompiluję, uruchamiam program i nowa metoda nie działa, nic się nie zmieniło... No tak, pewnie zapomniałem wywołać jak somekind. Sprawdzam w kodzie, nie, nie zapomniałem wywołać. Ustawiam breakpoint, odpalam unit testy pod debuggerem, zatrzymuje się we wskazanym miejscu. WTF? Jeszcze raz odpalam program bo może mi się coś przywidziało (późno było), ale nie, nadal nie działa. Patrzę w końcu do logów... a tam na samym początku "cannot bind to port 8080, port in use". W tle miałem uruchomioną starą wersję...

A innym razem miałem jeszcze taką wtopę, że nie wiedziałem, że nasz rozbudowany system skryptów odpalających aplikację jest wrażliwy na obecność różnych wersji jarów w katalogach build i lib, i wcale nie bierze najnowszej. I za każdym razem odpalało mi jakąś starą wersję, bo nie zrobiłem ant realclean (w odróżnieniu od ant clean, czyści wszystko razem ze ściągniętymi libami).

Sarrus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2512
2

Gdy początkujący programista bez podstawowych podstaw (np. tablice) bierze się za programowanie w obiektowym GUI (np. Windows Forms ).

S3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 61
5

"Po co mi dokumentacja, jestem pewny, że ta funkcja działa tak i tak ... "

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
3

A ile razy było tak, zwłaszcza przy początku nauki, że poprawiało się kod nie w tym pliku, który się potem kompilowało/uruchamiało. :D

nerf
  • Rejestracja: dni
  • Ostatnio: dni
0

Najczęściej to:
= zamiast ==
brak ";" na końcu instrukcji
1 zamiast !
if(x) zamiast if(x != 0) -> Dlaczego nie może być jak w c++? Czy to ustawienia IDE?;d
zong gdy przy teście jakiejś metody nie działa a po prostu zapomniałem ją wywołać ;p
PS: Wie ktoś jak utworzyć swój skrót klawiszowy w visualu pro 2010? Chce by zaznaczało cała linie w której aktualnie jestem. Gdy używam override czy automatycznie ide coś wpisuje to wrzuca wyjątek throw new wyjątek coś tam i muszę sięgać po myszkę ;(

aurel
  • Rejestracja: dni
  • Ostatnio: dni
3

if(x) zamiast if(x != 0) -> Dlaczego nie może być jak w c++? Czy to ustawienia IDE?

Ja akurat jak pierwszy raz napotkałam się na taki błąd, odetchnęłam z ulgą i zakrzyknęłam: nareszcie!!!

x nie jest typu bool. Takie to proste i sensowne. Dlaczego niby miałby zwracać true lub false?

Za to jest z tym związany inny popularny babol - użycie if (x) tam, gdzie miało się na myśli if (x > 0)....

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
0

C++ niewirtualny destruktor, gdy stosuje się polimorfizm. To dopiero potrafi generować dziwne błędy w zupełnie innym miejscu. Zwłaszcza, gdy to nie ty odpowiadasz za klasę bazową, ale jakiś ciołek z drugiego końca świata.

matek3005
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 358
0

Przy okazji destruktora wirtualnego wspomniało mi się jeszcze o pomyłkach przy redefiniowaniu metody wirtualnej. Obecne edytory pomagają unikać tego typu błędów ale przydałby się jakiś mechanizm samego języka, który w fazie kompilacji zgłaszałby takie sytuacje.

  • Rejestracja: dni
  • Ostatnio: dni
0

Ma sens, mnie szlag trafia jak cos co zwraca jakas metoda przypisywane jest do var'a. Chce skoczyc do tej klasy by ja rozszezyc i co? zamiast po prostu dac F12 na typie, to nie, klikaj se w inny plik i szukaj poprawnego typu. Obecnie w projekcie mam kilkaset plikow i takie zabawy w szukanego, zwlaszcza jak interfejs serwisu zwracajaca daną klase jest generyczny i nie ma jasno okreslonego typu, doprowadzaja mnie do szalu, bo komus sie chcialo napisac var zamiast dluzszej nazwy

Dokładnie. Już nic nie odpisałem na ten temat bo widziałem, że większość na tym forum to lamerzy, którzy dużo biadolą, a o czystości i estetyce kodu g**no wiedzą.
Jeśli ktoś pisze coś pod var-em to... skąd na Boga ktoś analizujący kod, albo go modyfikujący ma wiedzieć jakiego typu powinna być dana zmienna lub obiekt?

Ale pewnie... najlepiej jest biadolić na forum farmazony i myśleć, że jest się pr0 :)
Zmienne typu var używają tylko lamerzy, co nie wiedzą co tak naprawdę dzieje się w kodzie.

RE
  • Rejestracja: dni
  • Ostatnio: dni
0

Jesteście idiotami, wystarczy najechać kursorem na odpowiadające var albo nazwę zmiennej. Gdziekolwiek w projekcie.

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
0

Jeśli w Javie mam wywołanie typu o.a().b().c().d(); to robiąc ctrl+klik na dowolnej metodzie z łańcucha wywołań przenosi mnie do definicji tejże metody. Oczywiście jeśli pole o miało inny typ (wyżej w hierarchii) niż wskazywany obiekt, to IDE może przenieść też do klasy wyżej w hierarchii, ale taka już natura języków OOP. W VS na pewno jest tak samo.

Jeśli lokalna inferencja cię przerasta to ciężko z tobą. Musisz przesiąść się na Javę, tam jej na razie nie ma (oprócz inferencji genericsów, ale to w zasadzie nie zmniejsza ilości informacji widocznych na ekranie) :P

edit:
Albo nawet przesiądź się na czyste C - tam nawet nie ma metod, więc i łańcucha wywołań się nie da zrobić :P

  • Rejestracja: dni
  • Ostatnio: dni
4
sterylizator napisał(a):

Ale pewnie... najlepiej jest biadolić na forum farmazony i myśleć, że jest się pr0 :)
Zmienne typu var używają tylko lamerzy, co nie wiedzą co tak naprawdę dzieje się w kodzie.

Synek, sorry, ale co Ty za obietnice wyborcze płodzisz? Odpowiednie korzystanie z inferencji typów jest kluczowe nawet w C++, właściwe użycie cechuje wręcz profesjonalych programistów. Języki takie jak Scala, Haskell czy F# są od niej silnie zależne! Nikt przecież nie pisze, że var, auto czy brak jawnej deklaracji typu ma dotyczyć każdej zmiennej! Bezkrytyczne stosowanie dowolnego mechanizmu prowadzi do problemów, odpowiedzialne użycie cechuje dobrego programistę.

Demonical Monk
  • Rejestracja: dni
  • Ostatnio: dni
0
sterylizator napisał(a):

Jeśli ktoś pisze coś pod var-em to... skąd na Boga ktoś analizujący kod, albo go modyfikujący ma wiedzieć jakiego typu powinna być dana zmienna lub obiekt?

IDE jest dla lamerów, use notepad dude.

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
1

Czasami przy tworzeniu bibliotek DLL zapominam dodać funkcji do exports, a potem się dziwię czemu nie działa :P

Edit: no i jeszcze czasami uzywam typu string w komunikacji pomiędzy DLL a programem, bez dodania modulu ShareMem :P

mto9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 380
0

Może nie częsty ale dopiero co świeży: piszę sobie ładnie program, który wynik obliczeń zapisuje mi do pliku, no i tu nagle coś nie gra, co po chwilę otrzymuje takie same wyniki dla różnych danych, lekko poddenerwowany modyfikuje kod, szukam jakiś niestworzonych błędów, a tu wyniki te same.. Wkurwion* odchodzę od kompa, idę na kibel, przychodzę a tu mega zonk, program nie mógł nadpisać danych do pliku bo plik miałem uruchomiony w excelu :| no i teraz przyszło mi tylko podzielić się z wami moją głupizną :D

no_solution_found
  • Rejestracja: dni
  • Ostatnio: dni
0

ja na początku często popełniałem naprawdę drobne błędy w stylu: chciałem napisać zmienna += inna_zmienna a napisałem zmienna =+ inna_zmienna

albo jak robiłem 2 pętle for, jedna zagnieżdżona w drugiej i zmienne iteracyjne w tych pętlach tradycyjnie nazywałem i,j. Jak pętla robiła się trochę większa lub bardziej skomplikowana, to łatwo było pomylić i z j.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.