Percursos
/
C#
C#
/
Exercícios
/
O tempo em Deather
O tempo em Deather

O tempo em Deather

Exercício de aprendizagem

Introdução

Membros com corpo de expressão

Muitos tipos de membros de structs e de classes (sendo os campos a principal exceção) podem usar a sintaxe de membros com corpo de expressão. Definir um membro com uma expressão produz, muitas vezes, código mais conciso e mais legível do que os blocos e as instruções tradicionais.

Os métodos e as propriedades só de leitura estão entre os membros que podem ser definidos com corpos de expressão.

public int Times3(int input) => input * 3;

public int Interesting => 1729;

Expressões switch

Uma expressão switch pode fazer corresponder um valor a um dos casos de um conjunto de padrões e devolver o valor associado ou executar a ação associada. Essa associação é indicada pelo símbolo =>. Além disso, cada padrão pode ter uma guarda de caso opcional, introduzida pela palavra-chave when. A expressão da guarda de caso tem de ser avaliada como verdadeira para que esse ramo do switch seja selecionado. Os casos (também conhecidos como ramos do switch) são avaliados pela ordem do texto e, assim que se encontra uma correspondência, o processo é interrompido e o valor associado é devolvido.

double xx = 42d;

string interesting = xx switch
{
    0 => "I suppose zero is interesting",
    3.14 when DateTime.Now.Day == 14 && DateTime.Now.Month == 3 => "Mmm pie!",
    3.14 => "π",
    42 => "a bit of a cliché",
    1729 => "only if you are a pure mathematician",
    _ => "not interesting"
};

// => interesting == "a bit of a cliché"

Condicionais ternárias

Os operadores ternários permitem definir condições if em expressões, em vez de em blocos de instruções. Isto aproxima-se das abordagens da programação funcional e pode tornar o código muitas vezes mais expressivo e menos propenso a erros.

O operador ternário combina 3 expressões: uma condição, seguida de uma expressão a avaliar e devolver se a condição for verdadeira (a parte if, introduzida por ?), e de uma expressão a avaliar e devolver se a condição for falsa (a parte else, introduzida por :).

int a = 3, b = 4;
int max = a > b ? a : b;
// => 4

Expressões throw

As expressões throw são uma alternativa às instruções throw e, em particular, podem aumentar o poder das expressões ternárias e de outras expressões compostas.

string trimmed = str == null ? throw new ArgumentException() : str.Trim();

Instruções

Pediram-te que melhorasses algum código legado relacionado com uma estação meteorológica.

A estação meteorológica aceita leituras e produz alguns indicadores, como a temperatura e a pressão.

1. Melhora a concisão e a legibilidade dos métodos adequados

Refatora os métodos adequados da classe WeatherStation usando membros com corpo de expressão. Usa operações ternárias e expressões switch onde for adequado, para melhorar a expressividade e, potencialmente, reduzir erros.

Certifica-te de que todos os testes continuam a passar.

Editar via GitHub A ligação abre numa nova janela ou separador
C# Exercism

Estás pronto para começar O tempo em Deather?

Inscreve-te no Exercism para aprenderes e dominares C# com 62 conceitos178 exercícios, e mentoria humana real, tudo grátis.