Vlákno názorů k článku
Java zavádza string templates od RDa - mozna by byl zajimavejsi priklad, kde bude 1...

  • Článek je starý, nové názory již nelze přidávat.
  • 23. 3. 2024 2:30

    RDa

    mozna by byl zajimavejsi priklad, kde bude 1 year vs 2 years automaticky gramaticky spravne - bez toho aniz by trpela syntaxe. Nebo jeste lepsi priklad jsou radove cislovky s priponama 1-st, 2-nd, 3-rd, 4-th, 5-th..

  • 23. 3. 2024 8:15

    Ink

    Zajímavější v něčem ano, zvlášť pro použití ve světě, kde existuje jenom angličtina (bez výjimek typu mouse/mice). Podle mě jsou to tak speciální případy, že nemá smysl něco takového řešit nějak automaticky.

  • 23. 3. 2024 11:52

    Keltek

    Toto se v moderních OS používá velmi často a říká se tomu plurál :-)
    Podívejte se třeba na Android - pokud se tam překládají řetězce, které mohou obsahovat číslovku, definuje se jako plurál a pak máte možnost podle počtu zvolit řetězec na zero, one, two, few, many, other.

  • 23. 3. 2024 11:18

    johny

    Skúšobne som si vytvoril CLR procesor pre farebný výpis na konzole. Syntax sa ale v blízkej budúcnosti pravdepodobne môže zmeniť.

    import java.util.List;
    import java.util.ArrayList;
    import java.util.Arrays;
    
    enum Ansi {
        RESET("\u001B[0m"),
        RED("\u001B[31m"),
        GREEN("\u001B[32m"),
        YELLOW("\u001B[33m"),
        BLUE("\u001B[34m"),
        WHITE("\u001B[37m"),
        DEFAULT("\u001B[39m");
    
        private final String code;
    
        Ansi(String code) {
            this.code = code;
        }
    
        public String c() {
            return code;
        }
    
        public static boolean contains(String val) {
            return Arrays.stream(Ansi.values()).anyMatch(n -> n.name().equalsIgnoreCase(val));
        }
    
    }
    
    void main() {
    
        System.out.println(Ansi.RED);
    
        String name = "John Doe";
    
        System.out.println(STR."\{Ansi.BLUE.c()}an old falcon \{Ansi.RESET.c()}");
        System.out.println(CLR."RED Hello \{name}!");
        System.out.println(CLR."GREEN Hi \{name}!");
        System.out.println(CLR."YELLOW Halo \{name}!");
        System.out.println(CLR."BLUE Ahoj \{name}!");
        System.out.println(CLR."GREEN Ahoj \{name}!");
        System.out.println(CLR."BLUE Ahoj ako sa mas \{name}?");
        System.out.println(CLR."BLUEs ? 21 d");
        System.out.println(CLR."");
        System.out.println(CLR." ");
    }
    
    StringTemplate.Processor<String, RuntimeException> CLR = temp -> {
    
        List<String> fragments = new ArrayList<>(temp.fragments());
    
        String first = fragments.getFirst();
        String[] els = first.split(" ", 2);
    
        if (els.length != 2) {
            return StringTemplate.interpolate(temp.fragments(), temp.values());
        }
    
        Ansi val = Ansi.DEFAULT;
        String col = els[0];
        String msg = els[1];
    
        if (!Ansi.contains(col)) {
            return StringTemplate.interpolate(temp.fragments(), temp.values());
        } else {
    
            val = Ansi.valueOf(col);
    
            String res = switch (val) {
                // case null -> Ansi.DEFAULT.c();
                case Ansi.RED -> Ansi.RED.c();
                case Ansi.GREEN -> Ansi.GREEN.c();
                case Ansi.YELLOW -> Ansi.YELLOW.c();
                case Ansi.BLUE -> Ansi.BLUE.c();
                default -> Ansi.DEFAULT.c();
            };
    
            fragments.removeFirst();
            fragments.addFirst(res + msg);
    
            String last = fragments.removeLast();
            fragments.addLast(last + Ansi.RESET.c());
            return StringTemplate.interpolate(fragments, temp.values());
        }
    };