• ballerina 学习十五 控制流


    ballerina 的控制流没有什么特殊,只是相比一般语言多了一个模式匹配的操作match ,实际上其他语言(erlang elixir rust 中的模式匹配是很强大的)

    简单例子

    • if/else
    import ballerina/io;
    function main(string… args) {
        int a = 10;
        int b = 0;
        if (a == 10) {
            io:println("a == 10");
        }
    
        if (a < b) {
            io:println("a < b");
        } else {
            io:println("a >= b");
        }
    
        if (b < 0) {
            io:println("b < 0");
        } else if (b > 0) {
            io:println("b > 0");
        } else {
            io:println("b == 0");
        }
    }
    • while
    import ballerina/io;
    function main(string… args) {
        int i = 0;
        while (i < 3) {
            io:println(i);
            i = i + 1;
        }
    
        int j = 0;
        while (j < 5) {
            io:println(j);
            j = j + 1;
            if (j == 3) {
                break;
            }
        }
    
        int k = 0;
        while (k < 5) {
            if (k < 3) {
                k = k + 1;
                next;
            }
    
            io:println(k);
            k = k + 1;
        }
    }
    • match
    import ballerina/io;
    type KeyNotFoundError {
        string message;
        error? cause;
        string key;
    };
    map<string?> values = {"key1": "value1", "key2": ()};
    
    function getValue(string key) returns string?|KeyNotFoundError {
        if (!values.hasKey(key)) {
            KeyNotFoundError err = {message: "key '" + key + "' not found", key: key};
            return err;
        } else {
            return values[key];
        }
    }
    
    function print(string?|KeyNotFoundError result) {
    
        match result {
            string value => io:println("value: " + value);
            () => io:println("value is ()");
            KeyNotFoundError e => {
                io:println(e.message);
            }
        }
    }
    
    function main(string… args) {
        print(getValue("key1"));
        print(getValue("key2"));
        print(getValue("key3"));
    }
    • foreach
    import ballerina/io;
    function main(string… args) {
        io:println("Iterating over a string array:-");
        string[] fruits = ["apple", "banana", "cherry"];
        foreach v in fruits {
            io:println("fruit: " + v);
        }
    
        io:println("
    Iterating over a map:-");
        map<string> words = { a: "apple", b: "banana", c: "cherry" };
        foreach k, v in words {
            io:println("letter: ", k, ", word: ", v);
        }
    
        io:println("
    Iterating over a json object:-");
        json apple = { name: "apple", colors: ["red", "green"], price: 5 };
        foreach j in apple {
            match j {
                string js => {
                    io:println("string value: ", js);
                }
                json jx => {
                    io:println("non-string value: ", jx);
                }
            }
        }
    
        io:println("
    Iterating over a json array:-");
        json[] colors = check <json[]>apple.colors;
        foreach i, j in colors {
            io:println("color ", i, ": ", j);
        }
    
        io:println("
    Iterating over an xml:-");
        xml book = xml `<book>
                            <name>Sherlock Holmes</name>
                            <author>Sir Arthur Conan Doyle</author>
                        </book>`;
        foreach i, x in book.*.elements(){
            io:println("xml at ", i, ": ", x);
        }
    
        io:println("
    Iterating over an integer range:-");
        int endValue = 10;
        int sum;
        foreach i in [1..endValue] {
            sum = sum + i;
        }
        io:println("summation from 1 to " + endValue + " is " + sum);
    }
    • match expression ( 类似rust result)
    import ballerina/io;
    function getAgeCategory(int age) returns string|error {
        if (age < 0) {
            error e = { message: "Invalid" };
            return e;
        } else if (age <= 18) {
            return "Child";
        } else {
            return "Adult";
        }
    }
    
    function main(string… args) {
    
        string ageCategory = getAgeCategory(25) but {
            string s => s,
            error e => e.message
        };
        io:println(ageCategory);
    
        ageCategory = getAgeCategory(-5) but {
            string s => s,
            error e => e.message
        };
        io:println(ageCategory);
        ageCategory = getAgeCategory(25) but {
            error e => e.message
        };
        io:println(ageCategory);
    }
    • elvis (
    import ballerina/io;
    function main(string… args) {
        string|() x = null;
        string matchExprOutput;
        matchExprOutput = x but {
            string s => s,
            () => "value is null"
        };
        io:println("The output from match expression: ", matchExprOutput);
    
        string elvisOutput = x ?: "value is null";
        io:println("The output from elvis operator: ", elvisOutput);
    }

    参考资料

    https://ballerina.io/learn/by-example/elvis-operator.html
    https://ballerina.io/learn/by-example/match-expression.html
    https://ballerina.io/learn/by-example/foreach.html
    https://ballerina.io/learn/by-example/match.html
    https://ballerina.io/learn/by-example/if-else.html
    https://ballerina.io/learn/by-example/while.html

  • 相关阅读:
    SpringMVC学习笔记六:类型转换器及类型转换异常处理
    SpringMVC学习笔记五:HandlerExceptionResolver异常处理
    SpringMVC学习笔记四:SimpleMappingExceptionResolver异常处理
    SpringMVC学习笔记三:Controller的返回值
    SpringMVC学习笔记二:参数接受
    SSH+Ajax实现用户名重复检查(二)
    SSH+Ajax实现用户名重复检查(一)
    Java添加事件的四种方式
    用Java开发一个本地服务管理软件
    Java Web开发中的名词解释
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/9061971.html
Copyright © 2020-2023  润新知