Dlaczego Java nie ma deklaracji zmiennych o zasięgu bloku?
Następująca metoda nie działa, ponieważ blok wewnętrzny deklaruje zmienną o tej samej nazwie, co zmienna w bloku zewnętrznym. Najwyraźniej zmienne należą do metody lub klasy, w której są zadeklarowane, a nie do bloku, w którym są zadeklarowane, dlatego nie mogę napisać krótkiego, małego tymczasowego bloku do debugowania, co zdarza się w przypadku wypchnięcia zmiennej w zewnętrznym zakresie do cień tylko na chwilę:
void methodName() {
int i = 7;
for (int j = 0; j < 10; j++) {
int i = j * 2;
}
}
Prawie każdy język blokowy, z którego korzystałem, wspierał to, w tym trywialne małe języki, które pisałem dla tłumaczy i kompilatorów w szkole. Perl może to zrobić, podobnie jak Scheme, a nawet C. Nawet PL / SQL to obsługuje!
Jakie jest uzasadnienie tej decyzji projektowej dla Java?
Edytuj: jak ktoś zauważył, Java ma zasięg blokowania. Jak nazywa się koncepcja, o którą pytam? Szkoda, że nie pamiętam więcej z tych lekcji projektowania językowego. :)