C#: IDE, por favor, no me "ayudes" más...
Tags: spanish, csharp, programming, discuss
Published: 2023-12-19 16:33:54

---
title: C#: IDE, por favor, no me "ayudes" más...
published: true
series: ¿El IDE ayuda?
description: ¿Declaro la interfaz o implemento el método? ¡Tu IDE quiere que lo hagas todo a la vez!
tags: #spanish #csharp #programming #discuss
cover_image: https://upload.wikimedia.org/wikipedia/en/4/45/Screenshot_of_Delphi_10.4_IDE_with_VCL_designer_and_Dark_Theme.png
# Use a ratio of 100:42 for best results.
# published_at: 2023-12-19 13:45 +0000
---

A lo largo del tiempo, me he especializado como profesor de programación, y por lo tanto me fijo mucho en cómo los alumnos interaccionan con las herramientas que utilizamos en el aula. Aunque los propios lenguajes de programación han mejorado muchísimo en cuanto a expresividad y detección de errores, la herramienta que mñas ha avanzado es sin duda el IDE (*Integrated Development Environment*), o Entorno Integrado de Desarrollo.

Y no, este no es uno de esos textos en el que el profesor se queja de que los alumnos le llaman aduciendo que "no funciona", sin siquiera leer el mensaje de error que proporciona el IDE o incluso el propio lenguaje de programación. (Por cierto, en estos casos lo mejor es continuar el diálogo con "Eso es porque está mal.", copiando el estilo de mensaje conciso y desprovisto de toda información... Y a partir de ahí, guiarle hacia la lectura del mensaje de error.)

Mi queja se refiere más bien a esos subrayados en rojo. Seguramente, si este fuera un artículo en inglés lo habría tenido que titular más bien como: "IDE syntax hints considered harmful". Según parece, todos los escritores en habla inglesa deben aspirar a emular a Dijkstra...

Bueno, ¿cuál es el problema? Que cuando el alumno se encuentra con un subrayado en rojo, en lugar de posar el cursor del ratón encima y leer (y entender ), el mensaje de error, entran en un modo frenético-ansioso de manera que la única forma de volver a la normalidad sea hacer que el subrayado desaparezca. Como sea.

Supongamos, por ejemplo, que tenemos una clase **Calificacion**.

```c#
public class Asignatura {
    public Asignatura(string nombre)
    {
        this.Nombre = nombre;
    }
    
    public string Nombre { get; }
}

public class Calificacion {
    public Calificacion(Asignatura asigantura, decimal nota)
    {
        this.Asignatura = asigantura;
        this.Nota = nota;
    }
    
    public decimal Nota { get; }
    public Asignatura Asignatura { get; }
}
```

Esta clase puede utilizarse de esta manera:

```c#
var asig = new Asignatura( "Matracas" );
var nota = new Calificacion( asig, 7.8m );

Console.WriteLine( $"{nota.Asignatura.Nombre}: {nota.Nota}" );
```

Supongamos ahora que queremos darle a la clase **Calificacion** el método **Calificacion**.*CompareTo(c2)*. Esto implica que la clase **Calificacion** implemente la interfaz **IComparable<Calificacion>**, de una forma similar a lo siguiente:

![public class Calificacion: IComparable<Calificacion> {](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vl85gd0tzhc6brskbin1.png)

¿Cuál es el problema? Pues que en cuanto tecleemos el último '>', la declaración de la clase **Calificacion** será subrayada en rojo. Lo hace porque a la clase le falta el método *CompareTo(c2)*. Y le falta porque... la clase implementa la interfaz **IComparable<>**. Esto es una pescadilla que se muerde la cola: no "puedo" hacer una cosa sin hacer la otra... pero seguro que no puedo hacer las dos cosas a la vez.

La única solución que se me ocurre es crear el método antes que la declaración:

```c#
class Calificacion {
    // ...
    public int CompareTo(Calificacion? otra)
    {
        int toret = -1;

        if ( otra != null ) {
            if ( this.Nota == otra.Nota ) {
                toret = 0;
            }
            else
            if ( this.Nota < otra.Nota ) {
                toret = 1;
            }
        }

        return toret;
    }
}
```

Y después indicar que implementa **IComparable<>**. Muy incómodo e improbable acordarse.

[Continua...](https://dev.to/baltasarq/c-ide-por-favor-no-me-ayudes-mas-ii-4iah)