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 简单说明 数据类型和其他语言 ...
随机推荐
- CAJ2PDF
该项目不成熟,很容易遇到转换失败的例子. https://github.com/JeziL/caj2pdf https://github.com/JeziL/caj2pdf/wiki caj2pdf ...
- 大数据位图法(无重复排序,重复排序,去重复排序,数据压缩)之Java实现
1,位图法介绍 位图的基本概念是用一个位(bit)来标记某个数据的存放状态,由于采用了位为单位来存放数据,所以节省了大量的空间.举个具体的例子,在Java中一般一个int数字要占用32位,如果能用一位 ...
- Highcharts 动态图
Highcharts 动态图 每秒更新曲线图 chart.events chart.event 属性中添加 load 方法(图表加载事件).在 1000 毫秒内随机产生数据点并生成图表. chart: ...
- linux---进程,(rpm,yum)软件包
3) 为新加的硬盘分区,一个主分区大小为5G,剩余空间给扩展分区,在扩展分区上划分1个逻辑分区,大小为5G fdisk -l fdisk /dev/sdb p 查看 n 新建 p 主分区 ...
- ckeditor5富文本编辑器在vue中的使用
安装依赖: npm install --save @ckeditor/ckeditor5-vue @ckeditor/ckeditor5-build-classic 要创建编辑器实例,必须首先将编辑器 ...
- 浅谈HTML中的块级元素和内联元素
一.基本概念 1.块级元素(block element):一般都从新行开始占据一定的矩形空间,可以设置其宽.高属性来改变矩形的大小.一般情况下块级元素可以包含内联元素和其它块级元素,但也有特殊如for ...
- hdu 3032 Nim or not Nim? sg函数 难度:0
Nim or not Nim? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- bzoj3401
题解: 单调栈 一个一个压入 然后比下面高就弹出 代码: #include<bits/stdc++.h> using namespace std; ; int n,tot,a[N],z[N ...
- 二进制包形式安装mysql5.7.17
mysql5.7与mysql5.5的安装方式有些区别,如果按照5.5的方式来安装5.7就会有很多报错信息,下面介绍mysql5.7.17的二进制安装方式. 首先安装依赖包: yum -y instal ...
- 【Hibernate实战】源码解析Hibernate参数绑定及PreparedStatement防SQL注入原理
本文采用mysql驱动是5.1.38版本. 本篇文章涉及内容比较多,单就Hibernate来讲就很大,再加上数据库驱动和数据库相关,非一篇文章或一篇专题就能说得完.本文从使用入手在[Spr ...