Puzzle: ¿Qué hace este programa?

¿Qué hace el siguiente programa (si es que le parece válido, claro)?


using System;


static class Program
{
    static int mult(int n, int m = 2)  // ???
    {
        return n * m;
    }


    static void Main(string[] args)
    {
        Console.WriteLine(format: “{0:D05}”, arg0: mult(n: 950));  // ???
        Console.ReadLine();
    }
}


SUGERENCIA: Reclínese confortablemente en su máquina del tiempo y avance hasta 2010.


29/09/2008: La respuesta AQUI.


 

Octavio Hernandez

Desarrollador y consultor en tecnologías .NET. Microsoft C# MVP entre 2004 y 2010.

22 comentarios en “Puzzle: ¿Qué hace este programa?

  1. bueno, en la función mult la especificación de que m será igual a 2 es extraña e incorrecta (al menos en c# 2.0)
    de esto: “format: “{0:D05}”, arg0: mult(950)”
    no digo nada porque conociendole (leí su libro c# 3.0 y linq) prefiero callarme ya que estoy seguro que tendrá algún sentido.
    Un saludo!
    PD: estaba muy huérfana la pregunta y me decidí a ser el primero en decir algo.

  2. ¿Argumentos opcionales? Buena novedad para el 2010. Siempre he pensado por que c# no tenía está funcionalidad que si tiene vb.net. Veo que el PDC2008 este año está lleno de novedades.

  3. Octaviooooooooooooooooo, je je, cada vez el C# se parece más al C++…

    Parámetros por defecto, ya sólo falta que el compilador sea algo más optimizador, je je.

  4. Andrechi,

    En lo que respecta a los parámetros opcionales, no me parece nada grave el asunto. Es una característica que ha estado disponible en lenguajes fuertemente tipados como Delphi sin causar mayores inconvenientes. Incluso las razones que daban entonces los miembros del equipo de trabajo de C# suenan ahora algo “raras”:

    blogs.msdn.com/…/85556.aspx

    Más me molestan las concesiones al tipado dinámico, pero hay que reconocer que vivimos en un mundo abierto y que hay que permitir la interacción con tales sistemas. Si no necesitas esa interacción, simplemente ignora que existe la palabra dynamic. Eso era lo que hacía yo en Delphi con el horrendo Variant, exceptuando el código (bien encapsulado) en el que necesitaba interactuar con Office, y lo que pienso hacer ahora con dynamic siempre que pueda.

    Saludos – Octavio

  5. Rafa,

    Mientras no introduzcan las macros en C#, la diferencia seguirá siendo sustancial :-).

    Ya en serio, sí que sigue creciendo. Una paradoja, sin embargo, es que no veo que mucha gente utilice (tal vez solo es una impresión mía) las características unsafe (punteros, stackalloc, etc.) que se introdujeron en la versión 1 como una “concesión para el rendimiento”.

    Abrazo – OH

  6. PabloNetrix,

    Pero ya desde la primera versión C# tiene todo lo que tenía Delphi, exceptuando las declaraciones globales que como sabes se modelan con miembros estáticos, ¿no? ¿Qué más le falta?

    Lo de “dynamic” viene a ser lo que era el “Variant”, pero (me parece) un poco más controlado.

    Slds – Octavio

  7. Andrechi,

    >> Si tienes un equipo de más de 3 ó 4 personas, no puedes revistar todo el código que generan.

    Pero se puede tener unas Guidelines a seguir por todo el mundo, hacer code reviews periódicos…

    >> Un año después se modifica el código con:
    >>
    >> var i = 5;
    >>
    >> i = i + 0.3; // Ahora el compilador hará double

    No, dará error de compilación!

    >> El razonamiento de que si no te gusta no lo uses, no me vale.

    Yo no he dicho eso. He dicho “si no te gusta, no lo uses a menos que sea imprescindible”.

    Salu2 – Octavio

  8. Yo no veo ninguna novedad. A los parámetros opcionales ya estamos acostumbrados casi todos, y los parámetros con nombre ya los había en Ada, Smalltalk, Objetive C, PL/SQL y muchos más.

    A mi me parece que al C# lo están desgraciando cada vez más a base de hacer un pastiche sin ningún criterio.

  9. ¡Viva los parámetros opcionales! Ya era hora hombre, eso de tener que sobrecargar funciones para darle valor por defecto a los parámetros era farragoso y encima no dejaba clara la intención.

  10. Rodri,

    Coincido contigo. De todos modos, cuando recuerdo cuán en contra estaba Hejlsberg de los parámetros opcionales al principio, creo que estas dos cosas las han añadido solo para facilitar la programación para Office, donde todos los métodos tienen 30 parámetros, 25 de ellos opcionales.

  11. Rodri,

    :-).

    A mí lo que mas me impresiona del progreso de C# a lo largo del tiempo es como todas las decisiones que se toman en una versión sirven de apoyo para las que vienen en las siguientes. E incluso cuando se “mete la pata”, como pudiera decirse que es el caso, las puertas no quedan cerradas para el futuro.

  12. MMMMmmm….
    … pues a mi me hubiese gustado mucho más que hubiesen añadido un mejor soporte para los tipos anónimos y referencias const (aunque este último punto probablemente escape del lenguaje y deba ser a nivel de CLS)

    De todos modos a mi me parece bien lo de los parámetros opcionales, eh? 😉

    Saludos!

  13. Eduard,

    Estoy de acuerdo contigo en lo del soporte para los tipos anónimos (de hecho, hice una propuesta al respecto en connect.microsoft.com).

    De lo del soporte para referencias constantes no hablo – Rafa Ontivero nos dirá que seguimos acercándonos a C++ ;-).

    Slds – Octavio

  14. Pues a riesgo de que Rodri me suelte un sopapo que me tiemblen las orejas … a mi siguen sin gustarme los parámetros opcionales, ale ya lo he dicho 🙂

  15. Octavio,
    ¿El preproqué? Pues deberían, deberían. Así sería un lenguaje de hombres para hombres, ji ji… Ciertamente deberían irlo quitando de C++ poco a poco, pero me da que no lo van a hacer. De todos modos nadie te obliga a usarlo (yo al menos cada vez menos).

    Yo tampoco veo que nadie esté usando los temas unsafe, y quizás por ese injustificado odio a C++… Supongo que si lo estuvieran haciendo la gente preguntaría sobre ello, ya que es casi C++ y seguro que se iban a liar a conciencia.

    ¿Referencias constantes? ¿No jodas? ¿Tiene de eso? Pues ya sólo le falta la herencia múltiple… 🙂 Si no recuerdo mal, el CLR no las soporta por diseño (creo que Sutter en su Rationale comenta algo sobre el tema).

    PabloNetrix:
    ¡Hala, ha dicho Delphi! … ¿Te han visitado ya los Hombres de Negro? 😛

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *