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("\nIterating 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("\nIterating 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("\nIterating over a json array:-");
json[] colors = check <json[]>apple.colors;
foreach i, j in colors {
io:println("color ", i, ": ", j);
}
io:println("\nIterating 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("\nIterating 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
ballerina 学习十五 控制流的更多相关文章
- 强化学习(十五) A3C
在强化学习(十四) Actor-Critic中,我们讨论了Actor-Critic的算法流程,但是由于普通的Actor-Critic算法难以收敛,需要一些其他的优化.而Asynchronous Adv ...
- 智能车学习(十五)——K60野火2013版例程
一.中断函数注册方法: 1.格式: 配置某个功能的中断 注册中断函数 开启中断 2.一个例子 pit_init_ms(PIT0,);//定时中断初始化 set_vector_handler(PIT0_ ...
- salesforce lightning零基础学习(十五) 公用组件之 获取表字段的Picklist(多语言)
此篇参考:salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type) 我们在lightning中在前台会经常碰到获取pi ...
- Salesforce LWC学习(十五) Async 以及 Picklist 公用方法的实现
本篇参考:salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type) https://developer.salesfo ...
- java web 学习十五(jsp基础语法)
任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语法,而且在JSP中,所有的JAVA语句都可以使用. 一.JSP模版元素 JSP页面中的HTML内容称之 ...
- ballerina 学习十九 安全编程
ballerina 内部提供了几种常用的安全开发模型,token 认证(jwt) basic auth jwt 安全 参考代码 import ballerina/http; http:AuthPr ...
- ballerina 学习十八 事务编程
事务在分布式开发,以及微服务开发中是比较重要的 ballerina 支持 本地事务.xa 事务.分布式事务 ,但是具体的服务实现起来需要按照ballerian 的事务模型 infection agre ...
- ballerina 学习十六 错误&&异常处理
ballerina 的error 处理和elxiir 以及rust 比较类似使用模式匹配,但是他的 error lifting 还是比较方便的 同时check 也挺好,异常处理没什么特殊的 throw ...
- ballerina 学习十四 values && types
ballerina 包含的数据类型有string int map array record boolean ojbect function table tuple any 简单说明 数据类型和其他语言 ...
随机推荐
- 真正在线编辑的在线web编辑器
最近正在研究开发一款在线web编辑器架构,这是一款真正傻瓜式的web编辑器,可以在正常浏览页面的情况进行编辑,经过测试,对于一般网页页面来说非常好用方便,操作更简单. 一般的在线web编辑器虽说提供了 ...
- Kotlin------流程控制语句
流程控制语句是编程语言中的核心之一.可分为: 分支语句(if . when) 循环语句(for.while )和 跳转语句 (return . break .continue.throw)等. if表 ...
- 解决Mybatis配置ORM映射 时分秒都为0
方法一: Date类型的类成员变量使用java.sql.Timestamp 方法二: Mybatis的映射配置javatype=Timestamp.class
- nyoj202——红黑树
为了看懂这条题我还专门去看了看红黑树,结果大佬告诉我:左旋右旋不会影响中序遍历...... 然后就写了个简单的中序遍历...... #include <bits/stdc++.h> usi ...
- Spring Boot Logback几种日志详解
日志对于应用程序来说是非常重要的,Spring框架本身集成了不少其他工具,我们自身的应用也会使用到第三方库,所以我们推荐在Spring应用中使用SLF4J/Logback来记录日志. SLF4J与Lo ...
- mysql 5.1.71升级到5.6.30
mysql 5.1.71升级到5.6.30 mysqldump -h主机名 -P端口 -u用户名 -p密码 (–database) 数据库名 > 文件名.sql 备份MySQL数据库的命令 my ...
- bzoj1711
题解: 原点->食物建一个1 食物->牛见一个1 牛->牛'见一个1 牛'->饮料1 饮料->汇点1 代码: #include<cstdio> #includ ...
- jquery中ajax跨域的写法
由于JS同源策略的影响,因此js只能访问同域名下的文档.因此要实现跨域,一般有以下几个方法: 一.处理跨域的方式: 1.代理 2.XHR2 HTML5中提供的XMLHTTPREQUEST Level2 ...
- Week09《java程序设计》第九次作业总结
Week09<java程序设计>第九次作业总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 答: 2. 书面作业 本次作业题集集合 1. Li ...
- MoreEffectiveC++Item35 条款26: 限制某个class所能产生的对象个数
一 允许零个或一个对象 我们知道每当即将产生一个对象,我们有一个constructor被调用,那么我们现在想组织某个对象的产生,最简单的方法就是将其构造函数声明成private(这样做同事防止了这个类 ...