Jeśli naprawdę przyjrzysz się temu, co się stanie, gdy zadeklarujesz zmienną i zainicjujesz ją (przypisujesz wartość początkową), zobaczysz, że na poziomie instrukcji maszynowej lub kodu bajtowego dla Javy jest znacząca ilość mocy obliczeniowej użyte w obu tych krokach.
- deklarowania zmiennych środki przydzielania pamięci, tworząc instancję poprosił typu, etc etc
- Następnie inicjowania tej lokalizacji pamięci, ponownie wymaga więcej przetwarzania przenieść wartość domyślną do przydzielonego miejsca pamięci, jak wypełnienie go z 0s jeżeli wartość domyślna to 0. (Uwaga: kiedy losowe miejsce w pamięci jest przypisana do zmiennej, że pamięć może zawierać dowolny wzór, pozostawione tam przez poprzedniej wartości)
Więc jeśli użytkownik nieświadomie użyć zmiennej bez uprzedniego nadając mu akceptowalną wartość dla swojego typu, wtedy może wystąpić błąd, jeśli wartość, którą wa s nie było poprawne.
Więc jeśli język wymusza na inicjalizowaniu zmiennej (lub robi to samodzielnie) w deklaracji, zmniejsza szanse na błąd w dół linii, ale może marnować moc przetwarzania na coś, czego tak naprawdę nie chcesz.
Z drugiej strony, jeśli pozwala zadeklarować zmienną bez jej inicjalizacji, daje kontrolę i może zaoszczędzić trochę mocy obliczeniowej, ale otwiera szanse na błąd. (Załóżmy, że masz scenariusz, w którym początkowa wartość dla zmiennej zależy od innych warunków, które będą brać pod uwagę i odpowiednio przypisać zmienną.W takim przypadku inicjowanie var na deklaracji może być po prostu marnotrawstwem mocy obliczeniowej).
Języki decydują o tym, którą ścieżkę chcą przejść, w większości zależą od tego, co uważają za swoją moc.
jeśli chodzi o umożliwienie programistom sterowania i tworzenie zoptymalizowanych programów, wtedy zazwyczaj zezwalają na zadeklarowanie vars bez inicjalizacji, a także na dodatkowe rzeczy.
Ale jeśli chodzi o język zmuszający programistę do pisania programów bezbłędnych, zajęłoby to drugą ścieżkę.
Uważam, że odpowiedź jest różna w różnych językach. –
Tak, jest. Autor książki wspomina, że ta funkcja jest ważna w Javie, będę edytować post. –
Dobre pytanie. Zastanawiam się, jakie jest uzasadnienie? – xagyg