Najwyraźniej twoje pytanie nie dotyczy tego, czy zwarcie jest dobre czy złe, ale dlaczego VB.NET zapewnia operatorom to i bez niego. Mając to na uwadze, odpowiedź na
kiedy ocena zwarcia jest zła?
jest po prostu: gdy narusza kompatybilność wsteczną .
Ok, teraz możesz powiedzieć, że VB.NET nie jest bardzo wstecznie kompatybilny ze starym VB6 lub VBA, jednak przynajmniej niektóre części tego języka są. Decyzja Microsoftu o zachowaniu starej semantyki AND i OR (bez zwarć) spowodowała, że przy przenoszeniu starych programów VB na VB.NET istnieje ogromna kategoria błędów.
Z drugiej strony projektanci języka VB.NET prawdopodobnie podzielili się twoją opinią na temat zwarć. Kiedy dobrze pamiętam, pierwsze wersje przedpremierowe VB.NET zapewniały operatorom AND lub OR zwarcie, ale opinie programistów musiały być tak złe, że MS wycofało tę decyzję, zanim pojawiła się VB.NET 1.0. Dlatego projektanci postanowili wdrożyć go pod kątem nowych słów kluczowych ANDALSO
oraz ORELSE
jako kompromis między wsteczną kompatybilnością a użytecznością.
IMHO to była dobra decyzja. W ostatnim dziesięcioleciu musiałem przenieść kilka starszych programów i nie musiałem przeprowadzać silnej analizy wpływu dla każdego wyrażenia logicznego, w tym AND i / lub OR (zamierzony kalambur), aby to zadanie było o wiele łatwiejsze i bardziej ekonomiczne. Z drugiej strony, ilekroć muszę napisać nowe wyrażenie logiczne w VB.NET, moim domyślnym wyborem dla operatorów są formy zwarciowe, do czego jestem przyzwyczajony z C, C ++, C # itp. I pozwala napiszę kilka idiomów w bardziej zwięzłej formie (nawet jeśli ANDALSO potrzebuje 4 znaków więcej do pisania).
Jeśli nie jesteś przekonany, polecam przeczytać świetny artykuł Joela Spolsky'ego na temat zestawów słuchawkowych Martian , który mówi o tym, dlaczego wczesne decyzje projektowe w rozwoju oprogramowania nie mogą być łatwo odwołane, gdy dany komponent, język lub interfejs API dotrą do bazy użytkowników o określonym rozmiarze .