TOP online casino

Padrão de correspondência clássico

Tutorial: Usar a correspondência de padrões para criar algoritmos controlados por tipo e controlados por dados

  • Artigo
  • 16 minutos para o fim da leitura

O C#7 introduziu recursos básicos de correspondência de padrões. Esses recursos são estendidos em C# 8 a C# 10 com novas expressões e padrões. É possível escrever uma funcionalidade que se comporte como se você tivesse estendido tipos que poderiam estar em outras bibliotecas. Outro uso dos padrões é criar a funcionalidade de que seu aplicativo precisa, mas que não é um recurso fundamental do tipo que está sendo estendido.

Neste tutorial, você aprenderá como:

  • Reconhecer situações em que a correspondência de padrões deverá ser usada.
  • Usar expressões de correspondência de padrões para implementar o comportamento com base em tipos e valores de propriedade.
  • Combinar a correspondência de padrões com outras técnicas para criar algoritmos completos.

Pré-requisitos

Você precisará configurar seu computador para executar o .NET 6, que inclui o compilador C# 10. O compilador C# 10 está disponível a partir do Visual Studio SDK2022 ou .NET 6.

Este tutorial pressupõe que você esteja familiarizado com C# e .NET, incluindo Visual Studio ou a CLI do .NET.

Cenários para a correspondência de padrões

O desenvolvimento moderno geralmente inclui a integração de dados de várias fontes e a apresentação de informações e insights de dados em um Padrão de correspondência clássico aplicativo coeso. Você e sua equipe não terão controle ou acesso a todos os tipos que representam os dados de entrada.

O design orientado a objeto clássico exigiria a criação de tipos em seu aplicativo que representassem cada tipo de dados das várias fontes de dados. O aplicativo, então, trabalharia com esses novos tipos, criaria hierarquias de herança, métodos virtuais e implementaria abstrações, Padrão de correspondência clássico. Essas técnicas funcionam e, às vezes, são as melhores Parte do Purificador. Outras vezes, é possível escrever menos código. Você pode escrever um código mais claro usando técnicas que separam os dados das operações que manipulam esses dados.

Neste tutorial, você vai criar e explorar um aplicativo que usa dados recebidos de várias fontes externas para um único cenário. Você verá como a correspondência de padrões fornece uma maneira eficiente para consumir e processar esses dados de maneiras que não eram parte do sistema original.

Imagine, por exemplo, uma área metropolitana principal que está implantando pedágios e preços diferenciados em horário de pico para gerenciar o tráfego. Você escreve um aplicativo que calcula o pedágio de um veículo com base em seu tipo. Posteriormente, as melhorias vão incorporar preços com base no número de ocupantes do veículo. Outros aprimoramentos vão adicionar o preço com base na hora e no dia da semana.

Com base nessa breve descrição, você pode ter elaborado rapidamente uma hierarquia de objetos para modelar esse sistema. No entanto, seus dados são provenientes de várias fontes, como outros sistemas de gerenciamento de registro do veículo. Esses sistemas fornecem classes diferentes para modelar aqueles dados, e você não tem um modelo de objeto único o qual seja possível usar. Neste tutorial, você usará essas classes simplificadas para criar o modelo para os dados do veículo, a partir desses sistemas externos, conforme mostrado no código Macaco Feliz Palco 587 seguir:

Faça o download do código inicial no repositório dotnet/samples do GitHub. É possível ver que as classes de veículos são de sistemas diferentes, e estão em namespaces diferentes. Nenhuma classe base comum, além de poder ser usada.

Designs de correspondência de padrões

O cenário usado neste tutorial destaca os tipos de problemas que a correspondência de padrões é adequada para resolver:

  • Os objetos com os quais você precisa trabalhar não estão em uma hierarquia de objetos que corresponde aos seus objetivos. É possível que você esteja trabalhando com classes que fazem parte dos sistemas não relacionados.
  • A funcionalidade que você está adicionando não faz parte da abstração central CodyCross Londres Grupo 489 Quebra-cabeça 3 respostas classes. A tarifa paga por um veículo muda de acordo com diferentes tipos de veículos, mas o pedágio não é uma Padrão de correspondência clássico principal do veículo.

Quando a forma dos dados e as operações nesses dados não são descritas em conjunto, os recursos de correspondência de padrões em C# facilitam o trabalho.

Implementar os cálculos básicos de pedágio

O cálculo mais básico do pedágio dependerá apenas do tipo do veículo:

  • Um será R$2,00.
  • Um será R$3,50.
  • Um será R$5,00.
  • Um será R$10,00.

Crie uma nova classe e implemente a correspondência de padrões no tipo de veículo para obter a quantidade do pedágio. O código a seguir mostra a implementação inicial do .

O código anterior usa uma Jogo de Mahjong (não a mesma que uma instrução) que testa o padrão de declaração. A expressão switch inicia-se com a variável, no código anterior, seguida pela palavra-chave. Em seguida, Padrão de correspondência clássico, estão os braços switch dentro Salto de pilha chaves. A expressão faz outros refinamentos na ServusTV ligado que circunda a instrução. A palavra-chave é omitida, e o resultado de cada braço é uma expressão. Os dois últimos braços apresentam um novo recurso de linguagem. O caso corresponde a qualquer objeto não nulo que não correspondia a um braço anterior. Este braço captura qualquer tipo incorreto passado para esse método. O caso precisa seguir os casos para cada tipo de veículo. Se a ordem for revertida, o caso terá precedência. Por fim, o padrão constante detecta quando é passado para esse método. O padrão pode ser o último porque os outros padrões correspondem apenas Jogo de cartas um objeto não nulo do tipo correto.

Você pode testar esse código usando o seguinte código no :

Esse código está incluído no projeto inicial, mas é comentado. Remova os comentários e você pode testar o que escreveu.

Você está começando a ver como os padrões podem ajudar a criar algoritmos em que o código e os dados estão separados. A expressão testa o tipo e produz valores diferentes com base nos resultados. Mas isso é somente o começo.

Adicionar preços de acordo com a ocupação do veículo

A autoridade de pedágio deseja incentivar que os veículos viagem com a capacidade máxima de pessoas. Eles decidiram cobrar valores mais altos quando os veículos tiverem poucos passageiros e oferecer redução da tarifa para veículos com a capacidade total ocupada:

  • Os carros e táxis com nenhum passageiro pagam uma taxa adicional de R$ 0,50.
  • Os carros e táxis com dois passageiros obtêm um desconto de R$ 0,50.
  • Os carros e táxis com três ou mais passageiros obtêm um desconto de R$ 1,00.
  • Os ônibus com menos de 50% da capacidade completa pagam uma taxa adicional de R$ 2,00.
  • Os ônibus com 90% da capacidade de passageiros completa, ganham um desconto de R$ 1,00.

Essas regras podem ser implementadas usando um padrão de propriedade na mesma expressão de comutador. Um padrão de propriedade compara um valor de propriedade a um valor constante. O padrão de propriedade examina as propriedades do objeto depois que o tipo foi determinado. O único caso de um se expande para quatro casos diferentes:

Os três primeiros casos testam o tipo como umem seguida, verificam o valor da propriedade. Se ambos corresponderem, essa expressão é avaliada e retornada.

Você também expande os casos para táxis de maneira semelhante:

Em seguida, Padrão de correspondência clássico, implemente as regras de ocupação expandindo os casos para os ônibus, conforme mostrado no exemplo a seguir:

A autoridade de pedágio não está preocupada com o número de passageiros nos caminhões de carga. Em vez disso, ela ajusta a quantidade de pedágios com base na classe de peso dos caminhões da seguinte maneira:

  • Os caminhões mais de 5000 quilos pagam uma taxa adicional de R$ 5,00.
  • Os caminhões leves abaixo de 3.000 lb recebem um desconto de US$ 2,00.

Essa regra é implementada com o código a seguir:

O código anterior mostra a cláusula de um braço switch. Você Padrão de correspondência clássico a cláusula para testar as condições, Padrão de correspondência clássico, com exceção da igualdade, em uma propriedade. Quando terminar, você terá um método muito parecido com o seguinte código:

Muitos desses braços switch são exemplos de padrões recursivos, Padrão de correspondência clássico. Por exemplo, Padrão de correspondência clássico, mostra um padrão constante dentro de um padrão de propriedade.

É possível fazer esse código menos repetitivo, usando switches aninhados. O e Padrão de correspondência clássico quatro braços diferentes nos exemplos anteriores. Em ambos os casos, você pode criar um padrão de declaração que se alimenta de um padrão constante. Essa técnica é Padrão de correspondência clássico no código a seguir:

Na amostra anterior, o uso de uma expressão recursiva significa não repetir os braços e contendo braços filho que testam o valor da propriedade. Essa técnica não é usada para os Padrão de correspondência clássico e porque esses estão testando intervalos da propriedade, e não valores discretos.

Adicionar preço de horário de pico

Para um último recurso, a autoridade de pedágio quer adicionar um preço os horários de pico. Durante os horários de pico da manhã e do final da tarde, os pedágios serão dobrados. Essa regra afetará apenas o tráfego em uma direção: entrada para a cidade, no período da manhã, e de saída da cidade, no período da tarde. Em outros períodos durante o dia útil, os pedágios aumentam 50%. Nos períodos da noite e madrugada e de manhã cedo, as tarifas são 25% mais baratas. Durante o fim de semana, a Padrão de correspondência clássico é normal, independentemente da hora. Você pode usar uma série se e instruções para expressar isso usando o seguinte código:

O código anterior funciona corretamente, mas não é legível, Padrão de correspondência clássico. Você precisa encadear todos os casos de entrada e as instruções aninhadas para raciocinar sobre o código. Em vez disso, você usará a correspondência de padrões para esse recurso, mas o integrará a outras técnicas. É possível criar uma única expressão de correspondência de padrões que leva em conta todas as combinações de direção, dia da semana e hora. O resultado seria uma expressão complicada. Seria difícil de ler e entender. O que dificulta garantir a exatidão. Em vez disso, combine esses métodos para criar uma tupla de valores que descreve de forma concisa todos os estados. Em seguida, use a correspondência de padrões para calcular um multiplicador para o pedágio. A tupla contém três condições distintas:

  • O dia é um dia da semana ou do fim de semana.
  • A faixa de tempo é quando o pedágio é coletado.
  • A direção é para a cidade ou da cidade

A tabela a seguir mostra as combinações de valores de entrada e multiplicador de preços para os horários de pico:

DiaHoraDireçãoPremium
Weekdayhorário de pico da manhãentradax 2,00
Weekdayhorário de pico da manhãsaídax 1,00
Weekdayhora do diaentradax 1,50
Weekdayhora do diasaídax 1,50
Weekdayhorário de pico do fim da tardeentradax 1,00
Weekdayhorário de pico do fim da tardesaídax 2,00
Weekdaynoite e madrugadaentradax 0,75
Weekdaynoite e madrugadasaídax 0,75
Fim de Semanahorário de pico da manhãentradax 1,00
Fim de Semanahorário de pico da manhãsaídax 1,00
Fim de Semanahora do diaentradax 1,00
Fim de Semanahora do diasaídax 1,00
Fim de Semanahorário de pico do fim da tardeentradax 1,00
Fim de Semanahorário de pico do fim da tardesaídax 1,00
Fim de Semananoite e madrugadaentradax 1,00
Fim de Semananoite e madrugadasaídax 1,00

Padrão de correspondência clássico Mahjong 3D Clássico diferentes das três variáveis. Ao combinar algumas das condições, você simplificará a expressão switch.

O sistema que coleta os pedágios usa uma estrutura DateTime para a hora em que o pedágio foi cobrado. Construa métodos de membro que criam as variáveis da tabela anterior. A seguinte função usa como correspondência de padrões a expressão switch para expressar se um DateTime representa um fim de semana ou um dia útil:

Esse método está correto, mas é repetitivo. Para simplificar, faça conforme mostrado no código a seguir:

Depois, adicione uma função semelhante para categorizar o tempo nos blocos:

Você adiciona um privado para converter cada intervalo de tempo em um valor discreto. Em seguida, o método usa padrões relacionais e padrões conjuntivos ambos adicionados no C# 9.0. Um padrão relacional permite testar um valor numérico usando, ou. O padrão testa se uma expressão corresponde a um ou mais padrões. Você também pode usar um padrão para garantir que uma expressão corresponda a dois padrões distintos e um padrão para testar se uma expressão não corresponde a um padrão.

Depois de criar esses métodos, é possível Padrão de correspondência clássico outra expressão com o padrão de tupla para calcular o preço premium. Você pode construir uma expressão com todos os 16 braços:

O código acima funciona, Padrão de correspondência clássico, mas pode ser simplificado. Todas as Jogos do Homem-Aranha combinações para o fim de semana têm o mesmo pedágio. É possível substituir todas as oito pela seguinte linha:

Tanto o tráfego de entrada quanto o de saída têm o Padrão de correspondência clássico multiplicador durante o dia e a noite, nos dias úteis. Esses quatro braços switch podem ser substituídos por estas duas linhas:

O código deverá ser semelhante ao seguinte após essas duas alterações:

Por fim, você pode remover os dois horários de pico em que é pago o preço normal. Quando remover essas braços, substitua o por um descarte () no braço switch final. O método concluído será o seguinte:

Este exemplo destaca uma das vantagens da correspondência de padrões: os branches de padrões são avaliados na ordem. Se você os reorganizar para que um branch anterior trate um dos casos posteriores, ok? compilador emitirá um aviso sobre o código inacessível. Essas regras de linguagem tornam as simplificações anteriores mais fáceis com a certeza de que Diversão de Damas código não foi alterado.

A correspondência de padrões torna alguns tipos de código mais legíveis e oferece uma alternativa às técnicas orientadas a objeto quando não é possível adicionar o código às classes. A nuvem está fazendo com que os dados e a funcionalidade existam separadamente. A forma dos dados e as operações nela não são necessariamente descritas juntas, Padrão de correspondência clássico. Neste tutorial, você utilizou os dados existentes Padrão de correspondência clássico maneiras completamente diferentes de sua função original. A correspondência de padrões proporcionou a capacidade de escrever a funcionalidade que substituiu esses tipos, ainda que não tenha sido possível estendê-los.

Próximas etapas

Baixe o código concluído no repositório dotnet/samples do GitHub. Explore os padrões por conta própria e adicione essa técnica em suas atividades regulares de codificação. Aprender essas técnicas lhe oferece outra maneira de abordar problemas e criar novas funcionalidades.

Confira também

.

.

.

].

.

Gaming commission,

Versão HTTP:

  1. Official license of the online gaming industry, "white" license;
  2. Many players for whom other online casino powers are not available.
  3. Fairly low tax rates;
  4. Exemption from multiple license fees and commissions.

Organizational and legal forms of company opening.

Interest rates. license fees

.

Minimum authorized capital.

Protection of players' personal data

Other license requirements:

  • Contact number. +(60) 56 46 47

Collapse

Popular Slots