Рубрики
Без рубрики

[PT-BR] Экземпляр соединения для сопоставления с образцом

Java всегда считался языком verbose. Много строк кода, написанных для кур… Помеченный java, pt br.

Java всегда считался языком verbose. Много строк кода, написанных для выполнения простых задач. Несмотря на то, что платформа края с момента появления, эта функция всегда преследовал его. В JDK 10 предусмотрена JEP (JDK Enhancement Proposals) , номер 322, сообщает, что изменения в выпуске релизов. Новые версии будут выходить каждые 6 месяцев. Одной из причин для таких действий является непрерывное совершенствование, так как обеспечивает features кратчайшие сроки, и вы получаете постоянную обратную связь от сообщества. Были внесены изменения в платформу, в целом, как и в | JDK/|, Garbage Collector и на сам язык. Выступая на изменения в языке, чувствуется обеспокоенность в связи с таким уровнем детализации и JEP 375-это прекрасный пример этого. A JET em Запрашивает/| Сопоставление с образцом для примера , например, язык com сопоставление с образцом .

Pattern Matching это метод, который был адаптирован для многих стилей разных языков программирования, начиная с 1960-х годов, в том числе объектно-ориентированные языки текста, как SNOBOL4 и AWK, функциональных языков, таких как Haskell и ML, и совсем недавно расширенной объектно-ориентированных языки, как Scala (и совсем недавно, в C #).

( https://cr.openjdk.java.net/~briangoetz/amber/pattern-match.html )

Pattern Matching позволяет “образом” желаемого объекта будет выражена сжато, ((образец) и несколько инструкций и выражения испытать это “форма” по отношению к входным (Баланс) .

( https://openjdk.java.net/jeps/375 )

Каждый разработчик уже пришлось написать некоторую логику, которая проверяет, если выражение имеет определенный тип, и если это правда, извлечь какой-либо информации для последующей обработки. Примером этого является операция с instanceof .

if(conta instanceof ContaCorrente) {
     ContaCorrente contaCorrente = (ContaCorrente) conta;
     System.out.println(contaCorrente.mostrarExtrato());
} else if(conta instanceof ContaPoupanca) {
     ContaPoupanca contaPoupanca = (ContaPoupanca) conta;
     System.out.println(contaPoupanca.mostrarExtrato());
}
// Demais else if's que poderão existir

Приведенный выше код является функциональным, однако есть некоторые моменты, внимание.

  • Повтор кода: он Использует ContaCorrente и ContaPoupanca три раза в две строки кода.
  • Кастинг: Могут скрыть ошибки (ошибок) , что не будут проверяться во время компиляции.
  • Низкая сплоченность: “Повторение” и ” кастинги затруднить чтение, а, следовательно, понимание фрагмент кода.

Оператор instanceof расширен, чтобы получить стандартный тест типа, а не только один тип.

if(conta instanceof ContaCorrente contaCorrente) {
     System.out.println(contaCorrente.mostrarExtrato());
} else if(conta instanceof ContaPoupanca contaPoupanca) {
     System.out.println(contaPoupanca.mostrarExtrato());
}
// Demais else if's que poderão existir

По сравнению с предыдущем примере, обработки отличается в несколько пунктов. Оператор “сочетает в себе” целевой объект по умолчанию, тест типа следующим образом. Счета экземпляр ContaCorrente , это сделано casting (неявные) для переменной contaCorrente и эта переменная будет находиться в области действия блока.

Важно отметить, что при наличии else переменная не будет частью вашей сферы.

if(objeto instanceof String string) {
     // string está no escopo do bloco true
     string.toLowerCase();
} else {
     // string NÃO está no escopo do bloco false
     string.toString();
}

Вы понимаете, что точки внимания в предыдущем примере, уже не возникает.

Несмотря на значительное улучшение в том, как написать код выше, как нужно проверять новые типы счетов, читаемость находится под угрозой. Думая об этом, будущее JEP предусматривает улучшение pattern matchings для switch и следующий код будет возможный

switch(conta) {
     case ContaCorrente cc -> cc.numero = 12345;
     case ContaPoupanca cp -> cp.numero = 12345;
     // Demais cases que poderão existir
}

Наиболее интересным такого подхода в том, что не требуется default , потому что необходимо гарантировать, что все сравнения делаются на cases (Необходимо проверить всех детей Счет ) и в случае, если одно или более сравнений не будут сделаны, то будет ошибка компиляции.

Вы понимаете, что инженеры и разработчики языка есть, если волнует вопрос детализации языка. С выпуском релизов 6 в 6 месяцев, быстрого улучшения можно почувствовать. Идея поста была показать один из этих улучшений и план на будущее. Если какой-либо из пунктов не был, конечно, я открыт на все вопросы и/или предложения. До свидания!

Оригинал: “https://dev.to/j_a_o_v_c_t_r/pt-br-pattern-matching-com-instanceof-ic4”