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 简单说明 数据类型和其他语言 ...
随机推荐
- SpringSecurity——基于Spring、SpringMVC和MyBatis自定义SpringSecurity权限认证规则
本文转自:https://www.cnblogs.com/weilu2/p/springsecurity_custom_decision_metadata.html 本文在SpringMVC和MyBa ...
- CentOS 7.2下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1
一.安装前的准备工作 1.yum update #更新系统 2.yum install gcc gcc-c++ autoconf automake cmake bison m4 libxml2 ...
- 十五 web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础
在urllib中,我们一样可以使用xpath表达式进行信息提取,此时,你需要首先安装lxml模块,然后将网页数据通过lxml下的etree转化为treedata的形式 urllib库中使用xpath表 ...
- Linux 忘记密码解决方法,Linux 远程登录
一.Linux 忘记密码解决方法 很多朋友经常会忘记Linux系统的root密码,linux系统忘记root密码的情况该怎么办呢?重新安装系统吗?当然不用!进入单用户模式更改一下root密码即可. 步 ...
- 关于px em rem的一点小总结
2015-11-28 06:06:40 概念 都是CSS单位. px:像素 Pixel.像素 (计算机屏幕上的一个点) em:1em 等于当前的字体尺寸. 2em 等于当前字体尺寸的两倍. 例如,如果 ...
- SpringAnnotation注解之@Autowired
@Autowired:自动装配,不用在bean里写<property>属性来指定所依赖的属性 1 2 3 4 @Autowired public void setUserDao(UserD ...
- 企业号验证后携带URL参数跳转问题
http://report.dyxx.com/authorize/weixinlogin.aspx?url=http://user.dyxx.com/Xshow/lsWX.aspx?code=0000 ...
- 剑指offer--42.孩子们的游戏(圆圈中最后剩下的数)
约瑟夫环,用链表,队列,总之模拟过程 ----------------------------------------------------------------- 时间限制:1秒 空间限制:32 ...
- Python中的单例设计模式
1)设计模式: 是前人工作的总结和提炼.通常,被人们广泛流传的设计模式. 某一问题的特定解决方案,使用设计模式是为了可重用代码,是代码更容易被人理解, 增加代码的可用性. 2)单例设计模式: ...
- linux和windows双系统设置默认启动系统
1.以root身份登录linux系统: 2.启动终端,输入命令:vi /boot/grub/grub.conf,文件内容如下: #boot=/dev/sda default=0 (默认启动哪个系统的设 ...