Czy komitet projektujący C# rozważał kiedykolwiek składnię tego obiektu?
Tak, mamy. Rozważaliśmy to kilka lat temu. Jako dowód tego twierdzenia, patrz ostatni akapit mój artykuł tutaj:
http://blogs.msdn.com/b/ericlippert/archive/2009/01/26/why-no-var-on-fields.aspx
Konsensus zespołu projektowego było to, że był to „miło mieć” funkcji, ale nie na tyle przekonujące, że warto było znaczne koszty projektowania, wdrażania, testowania, dokumentowania i utrzymywania funkcji.
Zauważam również, że komentarze do wpisu na blogu, do którego dodałem, są bardzo negatywne w stosunku do funkcji; wydawało się, że wiele osób uznało składnię za nieatrakcyjną. To także wskazuje na to, że robimy tę funkcję.
Jednak proponowana składnia staje się szczególnie przyjemna, jeśli można ją połączyć z innymi funkcjami językowymi, które promują zwięzłą deklarację typów niezmiennych; jeśli zrobimy taką funkcję w hipotetycznej przyszłej wersji języka, wówczas proponowana przez nas składnia stanie się bardziej przekonująca.
Podkreślam ponadto, że ogólnie rzecz biorąc, opieramy się cechom, które wymagają wnioskowania z "zewnątrz" do "wnętrza"; wolimy ten przepływ informacji typu od środka na zewnątrz.Rozważmy na przykład ten problem:
M(new(blah));
Załóżmy M ma dwa przeciążeń, jedną, która pobiera C, a jeden, który zajmuje D. jest to, że "nowa C (bla)" lub "nowy D (bla)"? To może być albo. Teraz musimy przeanalizować oba! A jeśli oboje pracują, musimy dowiedzieć się, co jest lepsze.
Gorzej. Załóżmy, że masz
M(new(new(blah)));
gdzie znowu M pobiera C i D i C ma dwa konstruktory, które biorą E lub F i D ma dwa konstruktory, które biorą G i H. Które z:
M(new C(new E(blah)));
M(new C(new F(blah)));
M(new D(new G(blah)));
M(new D(new H(blah)));
jest wybrany i dlaczego?
Kiedy dochodzisz z zewnątrz do wnętrza, szybko dostaję się w "kombinatoryczne eksplozje", gdzie liczba przypadków do przeanalizowania staje się O (c n) w głębi zagnieżdżenia.
C# czy powód w ten sposób do lambdas i to jest jedna z najtrudniejszych części kompilatora uczynienia wydajnych i poprawne, proszę mi wierzyć. Nie chcemy dodawać podobnej funkcji do konstruktorów. Gdybyśmy dodali tę składnię, prawdopodobnie ograniczyłoby się to do scenariuszy, w których typ był jednoznacznie znany, analizując lewą stronę deklaracji zmiennej lub wyrażenia przypisania.
(Jak zawsze zauważam, że rozważania Erica dotyczące hipotetycznych przyszłych funkcji językowych w niezapowiedzianych i całkowicie fikcyjnych produktach, które nie mają harmonogramów ani budżetów, mają wyłącznie charakter rozrywkowy i nie powinny być interpretowane jako obietnica jakiegokolwiek konkretnego przyszłego produktu z żadnym konkretnym zestawem funkcji)
Hmm, to ciekawe, +1. Ja też lubię to lepiej niż opcja 'var', ponieważ pobiera informacje o typie po lewej stronie, do której należy. (Teraz zejdź z mojego trawnika!) –
Zauważam, że pytanie ma głosowanie na zakończenie w oparciu o "subiektywne i kłótliwe". Pytanie nie jest ani subiektywne, ani argumentacyjne; pytanie jest prostym pytaniem na temat tego, czy dana funkcja kiedykolwiek pojawiła się podczas dyskusji na spotkaniu poświęconym projektowaniu języka; to jest pytanie o obiektywny fakt. Tylko dlatego, że niewielu ludzi zna odpowiedź, nie stawia ona pytania subiektywnego ani argumentacyjnego. –
@Eric, niezależnie od tego, czy pojawił się do dyskusji, czy nie, nie jest pytaniem programistycznym. To zamieni się w "o ile zostało to przedyskutowane" lub "jeśli poprą", co jest subiektywne i kłótliwe. –