Articles of language design

¿Ventajas de la enumeración de Java sobre el viejo patrón “Typesafe Enum”?

En Java anterior a JDK1.5, el patrón “Typesafe Enum” era la forma habitual de implementar un tipo que solo puede tomar un número finito de valores: public class Suit { private final String name; public static final Suit CLUBS =new Suit(“clubs”); public static final Suit DIAMONDS =new Suit(“diamonds”); public static final Suit HEARTS =new Suit(“hearts”); […]

¿Por qué IEnumerable se hizo covariante en C # 4?

En versiones anteriores de C # IEnumerable se definió así: public interface IEnumerable : IEnumerable Como C # 4 la definición es: public interface IEnumerable : IEnumerable ¿Es solo para hacer que los moldes molestos en expresiones LINQ desaparezcan? ¿No introducirá esto los mismos problemas que con la string[] <: object[] (varianza de matriz rota) […]

¿Por qué no se pueden sincronizar los constructores de Java?

De acuerdo con la Especificación del lenguaje Java , los constructores no se pueden marcar sincronizados porque otros hilos no pueden ver el objeto que se está creando hasta que la hebra que lo creó haya terminado. Esto parece un poco extraño, porque de hecho puedo tener otro hilo para ver el objeto mientras se […]

La explicación de James Gosling sobre por qué se ha firmado el byte de Java

Al principio, me sorprendió que Java decidiera especificar que el byte está firmado, con un rango de -128..127 (inclusive). Tengo la impresión de que la mayoría de las representaciones numéricas de 8 bits no están firmadas, con un rango de 0..255 lugar (por ejemplo, IPv4 en notación decimal de puntos ). Entonces, ¿se le ha […]

¿Por qué no se declaran las variables en “try” en el ámbito en “catch” o “finally”?

En C # y en Java (y posiblemente también en otros idiomas), las variables declaradas en un bloque “try” no están dentro del scope de los bloques “catch” o “finally” correspondientes. Por ejemplo, el siguiente código no se comstack: try { String s = “test”; // (more code…) } catch { Console.Out.WriteLine(s); //Java fans: think […]

¿Por qué no se permite “final” en los métodos de interfaz de Java 8?

Una de las características más útiles de Java 8 son los nuevos métodos default en las interfaces. Hay esencialmente dos razones (puede haber otras) por las que se han introducido: Proporcionar implementaciones predeterminadas reales. Ejemplo: Iterator.remove() Permitiendo la evolución de la API JDK. Ejemplo: Iterable.forEach() Desde la perspectiva de un diseñador de API, me hubiera […]

¿Por qué C # no permite leer solo las variables locales?

Tener un debate amistoso con un compañero de trabajo sobre esto. Tenemos algunas ideas al respecto, pero ¿qué piensa la gente de SO sobre esto?

C ++: razonamiento detrás de la regla de ocultación

¿Cuál es el razonamiento detrás de la regla de ocultación en C ++? class A { void f(int); } class B : public A { void f(double); } // B::f(int) is hidden Si es una característica significativa, creo que también debería ser posible ocultar funciones sin definir nuevas funciones con el mismo nombre: algo como […]

¿Por qué las variables locales requieren inicialización, pero los campos no?

Si creo un bool dentro de mi clase, algo así como bool check , por defecto es falso. Cuando creo el mismo bool dentro de mi método, bool check (en lugar de dentro de la clase), aparece el error “uso de verificación de variable local no asignada”. ¿Por qué?

¿Por qué los campos privados son privados para el tipo, no la instancia?

En C # (y en muchos otros idiomas) es perfectamente legítimo acceder a campos privados de otras instancias del mismo tipo. Por ejemplo: public class Foo { private bool aBool; public void DoBar(Foo anotherFoo) { if(anotherFoo.aBool) … } } Como la especificación C # (secciones 3.5.1, 3.5.2) indica que el acceso a los campos privados […]