k47.cz    — každý den dokud se vám to nezačne líbit
foto Praha výběr povídky kultura | twitter FB


C# hejt

publikováno 18. 2. 2011 od k47

Bodově:

- Type inference nemůže být použita u návratového typu metody, což mimo jiné znemožňuje vracet objekty anonymních tříd.
- Type inference se v C# doporučuje používat jenom v případech, kdy je to nezbytně nutné (LINQ, anonymní třídy) nebo kdy nemůže dojít ke zmatení (viz. str. 78 Essential LINQ [1]).
- Inicializátory kolekcí jsou poněkud stupidní. Neumí si odvodit typ elementu. Viz C# new List { 1, 2, 3 } vs. Scala: List(1, 2, 3)
- Delegáti jsou velice matoucí. Je to koncept, který je tolik odlišný od všeho ostatního v typovém systému. Na jedné straně tady je hierarchická struktura tříd a na druhé straně odkazy na metody.
- Variance delegátů je správná, tedy kontravariantní argumenty, kovariantní návratový typ. Ale je tu jedno ale. Před C# 4.0 fungovala jenom pokud jsme do delegátu přiřadili funkci, ale ne když jsme jeden delegát přiřadili do jiného delegátu. To proto, že C# před verzí 4.0 neměl obecný mechanismus variance (viz ukázka).
- Delegáty nejsou vůbec potřeba, pokud jsou v jazyce funkční objekty. Delegát je stejně nakonec jenom třída s operátorem (). Anonymní funkce jsou v některých případech překládány na anonymní třídy. (viz & viz & viz)
- V jazyce jsou delegáty, anonymní delegáty a lambda funkce a někdy se poněkud duplikují.
- Variance se týká jenom generických rozhraní a delegátů. Když implementujeme generické rozhraní, implementující třída je invariantní. Třídy a structy mají smůlu. Z toho plyne, že: - ImmutableList list = new ImmutableList(); // tady si bude kompilátor stěžovat - IEnumerable list = new ImmutableList(); // ale tady ne
- Typové argumenty na které je aplikována variance mohou být jen referenční typy, žádné velké překvapení.
- "Zdánlivě" rekurzivní deklarace povoleny. interface INumber : IComparable<INumber> Tohle se nesmí protože CLR. Pomalu si začínám myslet, že type erasure má svůj smysl.

K tématu:

- http://www.buunguyen.net/blog/new-features-of-csharp-4.html
- http://blogs.msdn.com/b/ericlippert/archive/tags/covariance+and+contravariance/


[1] Calvert Ch., Kulkarni D. Essential LINQ. Boston, MA: Addison-Wesley, 2009.


vstoupit do diskuze    sdílet na facebooku, twitteru, google+

příbuzné články:
Scala - typově bezpečné eventy 📷
Scala type bounds vs. C# constraints on type parameters 📷
Scala for expression vs. C# LINQ
Scala versus C# 4.0 - Strukturální typy versus Dynamic member lookup 📷
Scala - trait Dynamic 📷
ScalaQuery 📷

sem odkazují:
Další várka článků převážně o Scale

píše k47 & hosté, kontakt: ascii@k47.cz