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 简单说明 数据类型和其他语言 ...
随机推荐
- uva11626逆时针排序
给一个凸包,要求逆时针排序,刚开始一直因为极角排序就是逆时针的,所以一直wa,后来发现极角排序距离相同是,排的是随机的,所以要对末尾角度相同的点重新排一次 #include<map> #i ...
- 【IIS转】:解决IIS下localhost访问需要输入用户名和密码的问题
[摘要]安装完IIS后,我们可能会发现浏览器输入localhost访问时提示我们输入用户名和密码,本文介绍了这种问题的解决方法,方便站长们调试自己的程序. 在我们的WIN XP系统中安装了IIS,但是 ...
- UVA-10047 The Monocycle (图的BFS遍历)
题目大意:一张图,问从起点到终点的最短时间是多少.方向转动也消耗时间. 题目分析:图的广度优先遍历... 代码如下: # include<iostream> # include<cs ...
- nyoj299——如何优雅的写矩阵快速幂
Matrix Power Series 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 Given a n × n matrix A and a positive i ...
- VB.Net日期格式化的5种使用方法
VB.Net日期(时间)格式化的5种使用方法 以下时间以2009年9月26号为例 第1种格式 : dd/MM/yyyy String.Format("{0:dd/MM/yyyy}&q ...
- 公客网beta阶段发布说明
项目 公客 公正客观的课程评价网站 功能说明 评价的增删改 对课程发表评价 限制评价次数(3次),删除与增量修改评价 评价下的讨论与点赞 在评价下添加讨论,支持在讨论中使用@与对方交流想法 为评价点赞 ...
- KindEditor富文本编辑框和BeautifulSoup的基本使用
KindEditor富文本编辑框 1.进入官网 2.下载 官网下载:http://kindeditor.net/down.php 本地下载:http://files.cnblogs.com/files ...
- APUE学习笔记——11 线程同步、互斥锁、自旋锁、条件变量
线程同步 同属于一个进程的不同线程是共享内存的,因而在执行过程中需要考虑数据的一致性. 假设:进程有一变量i=0,线程A执行i++,线程B执行i++,那么最终i的取值是多少呢?似乎一定 ...
- APUE学习笔记——11 线程基础
线程标识 线程由线程号进行标识.线程号仅在线程所属的进程环境中有效.也就是说属于不同进程的两个线程可能线程号一样. 线程标识用结构体pthread_t tid表示.与线程Id相关的函数如下: 比较两个 ...
- vue.js 源代码学习笔记 ----- instance render
/* @flow */ import { warn, nextTick, toNumber, _toString, looseEqual, emptyObject, handleError, loos ...