Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Dúvida sobre a Interface IComparable e o método Sort

Olá pessoal!

Na aula sobre ordenação de listas, tínhamos que ordenar, em ordem alfabética, uma lista de objetos do tipo Aula que possui duas propriedades: Titulo e Tempo. O professor explicou que, pelo fato de terem duas propriedades, o método Sort não conseguiria fazer a ordenação. Assim, precisaríamos implementar na classe Aula a interface IComparable e implementar o método CompareTo:

class Aula : IComparable //Implementa a interface IComparable para poder comparar dois bojetos dessa classe
{
      public Aula(string titulo, int tempo)
    {
        Titulo = titulo;
        Tempo = tempo;
    }

    public string Titulo { get ; set; }
    public int Tempo { get ; set ; }

//A interface IComparable exige uma implementação do método CompareTo, que precisa ser chamado pelo algoritmo interno do método Sort() da classe List<T>

    public int CompareTo(object? obj) //método para poder fazer a comparação
    {
        Aula that = obj as Aula; //converte obj para o tipo Aula
        return this.Titulo.CompareTo(that.Titulo); //faz a comparação do objeto aula com obj
    }

    public override string ToString()
    {
        return $"{Titulo} ({Tempo} min)";
    }   
}

Ele explicou também que caso quiséssemos ordenar de acordo com a propriedade Tempo, poderíamos usar a seguinte expressão lambda:

aulas.Sort((este, outro) => este.Tempo.CompareTo(outro.Tempo));

Assim, eu pensei: "Será que essa mesma expressão lambda funciona para fazer a ordenação em ordem alfabética?". Testei:

 aulas.Sort((a, b) => a.Titulo.CompareTo(b.Titulo));

E funcionou! Minha dúvida então é: por que implementar a interface IComparable e o método CompareTo se a expressão lambda já soluciona o problema?

2 respostas
solução!

Olá Wilson!Tudo blz?

Ótima pergunta! De fato, a expressão lambda pode ser utilizada para ordenar a lista de objetos Aula em ordem alfabética, como você testou. No entanto, é importante lembrar que a implementação da interface IComparable e do método CompareTo é uma prática recomendada em programação orientada a objetos, pois permite que a classe tenha um comportamento padrão de comparação, que pode ser utilizado em diferentes contextos.

Além disso, a implementação da interface IComparable permite que outras classes que utilizem a classe Aula possam ordená-la de forma mais simples, sem a necessidade de passar uma expressão lambda toda vez que a ordenação for necessária.

Por fim, é importante lembrar que a expressão lambda é uma sintaxe mais recente do C#, enquanto a interface IComparable e o método CompareTo já existem há muito tempo na linguagem e são amplamente utilizados em diferentes contextos.

Espero ter ajudado e bons estudos!

Ótima explicação! Obrigado, André!