En segundo lugar lo que dice kvb. Además, omito new
porque esto me permite invocar miembros directamente sobre el objeto construido, como en C#. Por ejemplo, el código de seguimiento funciona:
DateTime(2012, 12, 21).ToString()
El código siguiente no se trabajo y los resultados en un error de compilación:
new DateTime(2012, 12, 21).ToString()
Así que ahora tengo que poner entre paréntesis la expresión new
con el fin de conseguir que se compile:
(new DateTime(2012, 12, 21)).ToString()
no me gusta paréntesis adicionales, por lo que evitar el uso de new
ahora.
La una caja donde aún la usaría es cuando estoy creando un objeto que implementa IDisposable
. Esto es porque si omito la palabra clave new
al crear un IDisposable
el F # compilador da una advertencia:
let writeFile =
let writer = StreamWriter(@"hello.txt")
writer.WriteLine("hello")
Los resultados de este:
warning FS0760: It is recommended that objects that support the IDisposable interface are created using 'new Type(args)' rather than 'Type(args)' to indicate that resources may be owned by the generated value
puedo librarme de la advertencia mediante la adición en el new
palabra clave:
let writeFile =
let writer = new StreamWriter("hello.txt")
writer.WriteLine("hello")
La advertencia también me hace darse cuenta de que realmente debería tener un use
vinculante para mi IDisposable
:
let writeFile =
use writer = new StreamWriter("hello.txt")
writer.WriteLine("hello")
Pero si escribía mi código para utilizar new
todo el tiempo entonces nunca tendría la advertencia recordándome que estoy trabajando con un IDisposable
!!!
También hace que haya menos tipeo. ;-)
Parece la mejor opción, sí. – Stringer