2010-03-02 7 views
8

Anhelo esos dulces argumentos opcionales de los días en que programé más en C++. Sé que no existen en C#, pero mi pregunta es Por qué.¿Cuál es el razonamiento para que C# no admita argumentos opcionales/predeterminados?

Creo que la sobrecarga de métodos es un mal sustituto que hace que las cosas se compliquen muy rápido.

void foo(int x,int y,int z=0){ 
    //do stuff... 
} 

//is so much more clean than 

void foo(int x,int y){ 
    foo(x,y,0); 
} 
void foo(int x,int y,int z){ 
//do stuff 
} 

Simplemente no entiendo cuál es el razonamiento. El compilador de C# obviamente no tendría problemas para respaldar esto, solo Microsoft eligió no admitirlo.

¿Por qué, cuando se diseñó C#, no querían admitir argumentos opcionales?

+0

¡Sam Ng ha escrito sobre esto, Filosofía! sección: http://blogs.msdn.com/samng/archive/2009/04/17/named-and-optional-arguments-ties-and-philosophies.aspx –

Respuesta

12

Como dice Andrey, C# 4 tiene los parámetros opcionales y con los argumentos nombrados. Sin embargo, vale la pena señalar que una de las preocupaciones que hizo Anders reacio a incluirlos para empezar, es decir, que el valor predeterminado (que tiene que ser una constante) se hornea en el llamando al código - todavía está presente. En otras palabras, es el mismo problema que los valores públicamente accesibles const de C# 1.

+4

De acuerdo con este. El problema es que los problemas con los valores predeterminados no son entendidos por la mayoría de los desarrolladores que los utilizan, lo que se complica cuando el ensamblado con el parámetro opcional se actualiza con un * valor predeterminado * diferente.Por otro lado, los argumentos con nombre son un buen argumento para tener parámetros opcionales ... – OregonGhost

+0

No compro ese argumento contra los parámetros opcionales. Al cambiar una API pública, los usuarios tendrán que cambiar su código para reaccionar ante los diferentes comportamientos, independientemente de si está utilizando una sobrecarga de métodos o parámetros opcionales. – ChaosPandion

+0

@ ChaosPandion: Ya sea que lo compres o no, esa es la razón por la que Anders ha dado antes. –

6

Creo que es inútil intentar responder la pregunta "¿Por qué?". Pero tengo buenas noticias, C# 4.0 los tiene.

+0

oooh, no estaba al tanto. ¡Espero que! :) – Earlz

+0

Por otro lado, C# 4.0 los tiene para facilitar la interoperabilidad, no para fines generales; la mayoría de la gente no entenderá eso y simplemente los usará para todo. No creo que estas sean buenas noticias. – OregonGhost

1

Los argumentos opcionales no son tan simples como parecen. Es posible que tenga problemas complejos si tiene métodos sobrecargados que tienen argumentos opcionales. Las reglas de resolución pueden volverse muy complicadas muy rápidamente. Supongo que para la primera versión de C# no había una buena solución, así que omitieron los parámetros opcionales.

Pero probablemente sepa que C# 4.0 tendrá argumentos opcionales y con nombre, por lo que parece no ser una mala idea en general. ;-)

7

Aún no está allí, pero está en C# 4. Esto tiene que ver principalmente con el costo y qué tan bien encaja la característica con el principales partes nuevas del lenguaje (como Generics en .Net 2 o linq en 3). Los argumentos opcionales encajan con las novedades dinámicas que vienen en la versión 4, por lo que se han incluido.

Para citar Eric Lippert (¿Quién fue el propio citando Eric Gunnerson) sobre por qué muchos aparentemente buenas características no están incluidos:

(1) esto no es un proceso sustractivo; no comenzamos con C++, Java o Haskell y luego decidimos dejar alguna característica de ellos. Y (2) simplemente ser una buena característica no es suficiente. Las características tienen que ser tan atractivas que valgan los enormes costos en dólares de diseñar, implementar, probar, documentar y enviar la función. Tienen que valer la pena el costo de complicar el idioma y hacer que sea más difícil diseñar otras funciones en el futuro.

+0

+1 por la mayor complejidad de ajuste en otras características en el futuro , aunque me gustan los argumentos predeterminados – dsimcha

Cuestiones relacionadas