[Moja refleksja] Dlaczego w Javie nikt nie używa short?

0

Programuje sobie w Javie już od 1,5 roku. Tworzyłem jakaś klasę i nagle spadla na mnie myśl, że zamiast int mógłbym uzyć short. Późnie jzacząłem się zastanawiać, czy Java posiada taki typ. Doszedłem do wsniosku, że nigdy go nie używałem. Zacząłem się zastanawiać dlaczego i doszełem do wniosku, że to dlatego, iż w żadnym tutorialu/książce go nie używają. Zacząłem zaglądać do API Javy i tam short też nie jest używany. Konstryktor klasy Date zawiera parametr, który odpowiada za dzień i jest typu int, a mógłby być typu short.

Moje pytanie: Dlaczego w Javie nikt nie uzywa shorta? Ktoś może mysleć, że wynajduje sobie głupie problemy, ale ja po prostu chce wiedzieć.

0

a po co oszczędzać pamięć? Jest to kolejna rzecz, o której musi wiedzieć i myśleć programista.

Takie jest podejście w Javie. Java generalnie próbuje "ułatwiać" programiście jak się da. Język jest tak skonstruowany, że nie trzeba za dużo myśleć.

Wcale nie twierdzę, że to jest dobre - wręcz przeciwnie.

To oczywiście jest tylko moje prywatne zdanie na temat Javy i nie miałem zamiaru nikogo urazić.

0

Przeciez monza uzywac, tylko czy warto? Pomnoz ilosc zmiennych int w programie przez 2 a otrzyamsz ilosc zaoszczedzonej pamieci w bajtach ;).
W przypadku miliona zmiennch zaoszczedzisz w ten sposob okolo 2 MB. Warto? w 99,999999999... % przypadkow nie warto. Predzej skonczy sie zakres shorta co spowoduje nieprawidlowe dzialanie programu niz odniesiesz z tego realna korzysc.
A kolega wyzej moglby nie pie...yc ze 'nie trzeba za duzo myslec', nie trollowac i nie prowokowac kolejnej wojny c\ c++ vs java. Wiadomo co jest lepsze ;-).

0
luser napisał(a)

. Wiadomo co jest lepsze ;-).

Czyli co lepsze? Tak sie sklada ze znam i jave i c/c++.

Osobiscie wole C++ - java jest smieszna w porownianiu z C++.

0
javacplusplus napisał(a)
luser napisał(a)

. Wiadomo co jest lepsze ;-).

Czyli co lepsze? Tak sie sklada ze znam i jave i c/c++.

Osobiscie wole C++ - java jest smieszna w porownianiu z C++.

Nie, nie dam sie wciagnac w idiotyczna dyskusje z anonimowymi uzytkownikami ;)

0

Łomatko jak dzieci w przedszkolu -.- "A moje zabawki są fajniesze" Jasne że wiadomo co jest lepsze - to czego akurat potrzebujesz... Java została stworzona do innych celów niż C/C++ i dyskutowanie nad wyższością jednego nad drugim jest równie bezprzedmiotowe jak dyskusja o wyższości młotka nad śrubokrętem...

Co do Twojego pytania to odpowiedź jest jak dla mnie dość jasna - po prostu nikt o tym tak naprawdę nie myśli bo różnice są minimalne, a poza tym zwiększa to tylko ryzyko przepełnienia zmiennej, czyli trudnych do wyłapania i zidentyfikowania błędów, innymi słowy więcej strat niż korzyści ;)

0

Dodam jeszcze, że większość funkcji bibliotecznych zwraca int, przy stosowaniu zmiennych short co raz trzeba by
rzutować.

0

o ile mi widaomo i tak jest to 4 bitowa wartosc, boolean fizycznie również z tego co wiem.

0

Pisząc o bitach miałeś na myśli bajty ? Fragment dokumentacji

The integral types are byte, short, int, and long, whose values are 8-bit, 16-bit, 32-bit and 64-bit
.

0

Współczesne 32 i 64-bitowe procesory są tak skonstruowane, że posługują się w rzeczywistości danymi, które realnie odpowiadają w Javie typom int oraz long (takie dane są przesyłane między rejestrami oraz pamięcią RAM). Każda zmienna, która jest krótsza musi zostać automatycznie promowana do tych rozmiarów. Z tego samego powodu dane są rozkładane w RAM co 8 bajtów. Jeżeli wyrównania nie będzie, to czasy dostępu nie będą wynosić 4 czy 8 taktów procesora, lecz 20-30 - tyle ile może zająć najgorszy przypadek. Podobnie z trafianiem danych w cache.
Wiadomo, że najważniejszą zaletą komputerów jest szybkość obliczeń. Jeszcze dekadę temu trzeba było iść na kompromis między szybkością, a wielkością używanej pamięci - a to dlatego, że pamięć była droga w stosunku do pojemności. Użycie coraz większych szerokości danych w bitach nie zmniejsza szybkości obliczeń ponieważ wszystkie bity są przesyłane i obliczane zazwyczaj równolegle. Zmniejszanie więc danych może mieć więc jedynie sens w przetwarzaniu szeregowym, na nośnikach masowych oraz do użycia w przypadku reprezentacji znaków. Od kiedy ceny pamięci RAM stale spadają nie ma żadnego powodu powodować szczególnych zabiegów w oszczędzaniu pamięci kosztem znaczącej utraty szybkości przetwarzania. Znacznie taniej i prościej jest użyć np. kompresji, która daje możliwość upakowania danych z dokładnością oszczędności do pojedynczych bitów, a często powoduje nawet przyspieszenie działania programów (sic!) przez zmniejszenie liczby przesyłanych danych na powolne nośniki i łącza.

Short czyli liczba 16-bitowa, ani nie ma zalet jako dane obliczane szybciej niż int, ani nie ma zalety szczególnie dużej oszczędności pamięci masowej. Dlatego w przyszłości dominować będą typy long w pamięci RAM plus kompresja oraz byte na nośnikach masowych. Obecnie prawdziwym zastosowaniem danych o szerokości short jest typ char w wersji unicode, który też jest daną 16-bitową, a może pomieścić 95% znaków wszystkich języków świata. Dlatego short jako dana liczbowa nie ma obecnie większej racji bytu. Dodatkowo Java ze ścisłym przestrzeganiem konwersji w celu wymuszenia utraty precyzji bardzo utrudnia korzystanie z krótszych liczb, a w przeciwieństwie do typu byte nie daje w zamian znaczących zalet.

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