Dla estetyki i czytelności.
Funkcji w C też moglibyśmy nie zamykać }
:]
Przecież wystarczy sam return
.
Następna funkcja albo koniec pliku też oznaczają, że poprzednia funkcja się skończyła.
Nie do końca, zawsze może być etykieta za return do użycia z goto
. Tak się raczej nie robi, ale w czasach gdy C było projetowane…
Tak najogólniej, nadmiarowość w języku jest w pewnej ilości bardzo pożądana, bo sprawia, że w razie błędu, będzie on wyłapany, a nie zinterpretowany (oczywiście Java jest daleko daleko poza tą granicą :D). W tym konkretnym przypadku, znacznie łatwiej to parsować, bo mimo wszystko nie zawsze zawartość znaku to tylko jeden znak, przecież może być np. '\n'
. Powodzenia w leksowaniu tego bez zamykającego apostrofu, zwłaszcza w czasach kiedy C było projektowane, każdy bajt i każdy cykl procesora się liczył. Natomiast nowe języki na ogół kopiują rozwiązania ze starych, żeby łatwiej było się przesiąść na nową technologię – przyznaję, często jest to praktykowane do przesady. No i może trochę ze względu takiego, że jak mamy cudzysłów to oczekujemy jego zamknięcia, chociaż w lispie stosuje się apostrofy bez zamknięć i nie ma z tym problemu. :)