Haskell-Style Pattern Matching in Records #344

Open
opened 2024-08-06 18:37:11 +00:00 by RubenKraft · 0 comments
Collaborator

Feauture Request

Eine Erweiterung des Pattern Matching um direktes Matching mit Literalen in Records würde einen echten Mehrwert in JavaTX bringen. Dadurch könnte beispielsweise folgender Code möglich werden:


record ValueMatching(String x) {}

public class Main{
    public main(args){

        var valueMatch = new ValueMatching("Haskell-Style");

        switch(valueMatch){
            case ValueMatching("Haskell-Style") -> System.out.println("Value-Matching im Haskell-Style.");
            default -> System.out.println("Kein Valuematching");
        }
    }
}

Bisher ist nur folgendes möglich:


record ValueMatching(String x) {}

public class Main{
    public main(args){

        var valueMatch = new ValueMatching("Haskell-Style");

        switch(valueMatch){
            case ValueMatching(a) -> System.out.println("a kann jeder Wert sein");
            default -> System.out.println("Kein Valuematching");
        }
    }
}

Vorteile

Der Vorteil dieser Variante ist ein "echtes" Pattern-Matching, welches wertbasiert arbeitet. Damit können tatsächliche Werte innerhalb des Records verglichen werden und nicht nur die Typen. Das ermöglicht auch sehr einfache null-Checks bspw.

Einschränkungen

Das ganze ist natürlich nur möglich, wenn auch Literale des Typs verfügbar sind, also beispielsweise String, Double, Float, Integer, null, ...

Implementierung

Ich kenne mich zu wenig aus, um den Aufwand einschätzen zu können, daher erstelle ich diesen Issue.

## Feauture Request Eine Erweiterung des Pattern Matching um direktes Matching mit Literalen in Records würde einen echten Mehrwert in JavaTX bringen. Dadurch könnte beispielsweise folgender Code möglich werden: ```java record ValueMatching(String x) {} public class Main{ public main(args){ var valueMatch = new ValueMatching("Haskell-Style"); switch(valueMatch){ case ValueMatching("Haskell-Style") -> System.out.println("Value-Matching im Haskell-Style."); default -> System.out.println("Kein Valuematching"); } } } ``` Bisher ist nur folgendes möglich: ```java record ValueMatching(String x) {} public class Main{ public main(args){ var valueMatch = new ValueMatching("Haskell-Style"); switch(valueMatch){ case ValueMatching(a) -> System.out.println("a kann jeder Wert sein"); default -> System.out.println("Kein Valuematching"); } } } ``` ## Vorteile Der Vorteil dieser Variante ist ein "echtes" Pattern-Matching, welches wertbasiert arbeitet. Damit können tatsächliche Werte innerhalb des Records verglichen werden und nicht nur die Typen. Das ermöglicht auch sehr einfache null-Checks bspw. ## Einschränkungen Das ganze ist natürlich nur möglich, wenn auch Literale des Typs verfügbar sind, also beispielsweise String, Double, Float, Integer, null, ... ## Implementierung Ich kenne mich zu wenig aus, um den Aufwand einschätzen zu können, daher erstelle ich diesen Issue.
RubenKraft added the
Feature Request
label 2024-08-06 18:37:11 +00:00
pl was assigned by dholle 2024-08-07 12:35:39 +00:00
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: JavaTX/JavaCompilerCore#344
No description provided.