Inkrementacja ++

0

Witam.
Mam pytanko co do instrukcji ++. Zauważyłem, że jeśli użyję jej w metodzie (np. metoda(n++)) to jako argument zostanie użyta liczba n, a nie n+1. Jeśli zrobię przypisanie int a=b++; to do a zostanie przypisane b, a nie b+1. Powstaje, więc pytanie, po cholerę to właściwie wprowadzono, nie jest to żadna oszczędność znaków, bo to to samo co +1, a łatwo może doprowadzić do stworzenia trudnych do wykrycia błędów, bo jej działanie w przypadku argumentów metod jest całkowicie niepraktyczne i nieintuicyjne. W pętli jeszcze ma to sens, ale równie dobrze można po prostu obniżyć wartość początkową o 1 i dać na końcu +1, albo tak zaprogramować pętle, aby zmiana argumentu była dokonywana po wykonaniu instrukcji wewnątrz pętli. Nie widzę żadnego solidnego powodu dodania tej instrukcji do języków programowania, nie umiem sobie wyobrazić przypadku, w którym chciałbym wykonać jakieś operację na zmiennej, a dopiero po nich ją powiększyć za pomocą tego samego równania. Czy istnieje jakaś sytuacja w której ++ ma większy sens niż stosowanie innych instrukcji?

0

Przecież to zwykły syntactic sugar, nic więcej. Jest wiele takich instrukcji w językach programowania, które nie wprowadzają niczego "nowego" tylko dostarczają specjalną skróconą składnie.

6

i++ to jest postinkrementacja, możliwe że chciałeś użyć ++i czyli preinkrementacji. Tu masz artykuł o tym. (Nie wiem czy dobry, pierwszy z google)
IHMO zarówno pre- jak i post- inkrementacja to konstrukcja która miała sens w C i C++ przy operowaniu na wskaźnikach (wtedy ++p czasem inaczej się zachowuje niż p+=1). Dla Javy nie ma to żadnego sensu i tylko zaśmieca składnie. Na szczęście w czasach iteratorów i streamów coraz rzadziej używane

Update:
Jak mi zwrócił uwagę @Wibowit w Javie nie da się iterować po tablicy z użyciem iteratora. Ale dalej nie jest to podstawą do używania ++. Można napisać

for (Element element : arrayOfElements) {
  //some code
}

lub jeśli ktoś chce mieć dostęp do indeksu

for (int i = 0; i < arrayOfElements.length; i += 1) {
  //some code
}
0

Dziękuję za odpowiedzi.

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