Ballerina是今年9月10日发布的最新编程语言1.0版本。 有超过一千种编程语言。 为什么需要另一种编程语言? Ballerina语言旨在简化称为集成的特定编程领域。 您可能是开发各种Web服务并打算将这些服务互连的开发人员。 然后,Ballerina语言可能是您的下一个编程伴侣。
这篇文章旨在向您介绍Ballerina,这是一种灵活,功能强大且美观的编程语言,可帮助您实现各种集成需求。 您可以从Ballerinalang官方网站下载并安装Ballerina。
它是什么样子的?
当我说这是一种编程语言时,首先想到的是外观。 Ballerina的语言语法是基于Java,Go和JavaScript等编程语言而形成的。 Ballerina是一种静态类型的语言。 Ballerina有nil,boolean,int,float,decimal和string作为基本数据类型。 例如,如果您需要定义一个整数,则语法如下。
整数总计= 99;
与其他语言一样,Ballerina具有main方法,这是主要程序入口点。 您可以编写一个简单的“ hello world”,如下所示。
import ballerina/io;
public function main () {
io:println( "Hello, World!" );
}
除了常规的原始数据类型之外,Ballerina还提供了各种非原始数据类型,例如数组,元组,地图,表,联合等。Ballerina将nil表示为括号“()”
变量的另一种特殊类型是“ anydata”数据类型。 此类型是()| boolean | int | float | decimal | string |(anydata | error)[] | map <anydata | error> | xml | table数据类型的并集。 anydata变量可以在期望纯值的地方使用。
由于Ballerina专为构建可在网络上运行的应用而设计,因此它本身就支持JSON和XML。 您可以在JavaScript中轻松定义JSON变量,如下所示。
json user = {
fname:"Peter" ,
lname: "Stallone" ,
"age" : age,
address: {
line: "20 Palm Grove" ,
city: "Colombo 03" ,
country: "Sri Lanka"
}
};
io:println(user.address.country);
同样,您可以定义和与XML对象交互。
xml x1 = xml `<book>The Lost World</book>`;
io:println(x1);
Ballerina提供了用于实现各种功能的内置库。 在Ballerina中,这称为模块。 模块的工作方式与Java包相同。 您可以将内置模块或自己的模块导入应用程序。 Ballerina具有内置的日志记录,数学,编码,字符串,缓存,时间,文件处理以及许多其他模块。
语法的流控制与其他语言相同。 它支持语法“ if else”,“ while”和“ foreach”。 Foreach语法提供了对数组和映射的迭代支持。 如果您正在寻找一种验证空值的有吸引力的方法,那么Ballerina将把Elvis运算符提供给Elvis运算符,以验证指定的变量是否为空。 语法将为“表达式?:expressionIfNil”,下面是一个示例,用于验证变量x是否为null。
string elvisOutput = x ?:"value is nil" ;
Ballerina的面向对象编程
Ballerina确实为面向对象的编程提供了帮助。 Ballerina OOP语法似乎更接近于Python OOP语法。 这是使用构造函数定义对象的示例。
type Person object {public int age;
public string firstName;
public string lastName;
function __init ( int age, string firstName, string lastName) {
self.age = age;
self.firstName = firstName;
self.lastName = lastName;
}
function getFullName () returns string {
return self.firstName + " " + self.lastName;
}
function checkAndModifyAge ( int condition, int a) ;
};
function Person.checkAndModifyAge( int condition, int a) {
if (self.age < condition) {
self.age = a;
}
}
实例化对象是简单而直接的,例如“ Person p1 = new(5,“ John”,“ Doe”);”。 可以使用dot(“。”)运算符访问对象,该运算符与其他语言相同。
p1.getFullName()
Ballerina正在为封装提供帮助。 在这里,您可以使用适当的访问级别在对象内定义变量。 Ballerina支持以下访问修饰符。
公共-随处可见
私人的-仅在同一对象内可见
无修饰符-仅在同一包装中可见。
您也可以在Ballerina中使用抽象概念。 抽象是强大的OOP概念,在大型模块化软件的设计中必不可少。 您可以在Ballerina中定义和重用抽象对象。 您可以使用abstract关键字将对象转换为抽象对象。 示例抽象对象如下。
type Personabstract object {
public int age;
public string firstName;
public string lastName;
function getFullName () returns string ;
function checkAndModifyAge ( int condition, int a) ;
};
您可以按以下方式重用“ Person”对象,以重用Person对象中的变量和方法。
type Employeeabstract object {
*Person;
public float salary;
function __init ( int age, string firstName, string lastName) {
self.age = age;
self.firstName = firstName;
self.lastName = lastName;
}
function getSalary () returns float ;
};
还剩下一种称为多态的OOP概念,以用Ballerina的语言来完成OOP概念。 多态性也可以在Ballerina语言中实现,如下所示。 在这里,一个人员对象可以有许多类型,因为它是一个抽象类。
Person p =new Employee( 5 , "John" , "Doe" );
与Ballerina语言整合
正如我在简介中前面提到的那样,Ballerina是专门为解决集成问题而设计的。 我们生活在地球上成千上万个Web服务器正在运行并彼此交互的地球上。 早期的开发人员在将这些服务相互连接时遇到问题。 企业集成总线作为一种解决集成问题的方法而出现。 ESB模型提供了一种优雅的方式来将各种不同的服务彼此互连。 这些ESB产品的常见问题是配置困难且灵活性较低。
与ESB相比,Ballerina更加用户友好,因此开发人员可以通过编码来设计系统。 Ballerina提供内置库来解决各种集成问题。
集成的一般要求是在不同协议之间读取,转发和转换消息。 Ballerina为HTTP,HTTPS,HTTP2,Websockets,GRPC,TCP,UDP等传输提供内置帮助。
Ballerina可以同时充当客户端和服务器。 将请求发送到另一个端点很简单,因为它只需要三行代码。 您可以根据需要设置请求标头,从而轻松调用REST API后端。 由于Ballerina本机支持JSON,因此您可以直接在软件中操作JSON内容,而无需从第三方导入模块。
import ballerina/http;
http:Client clientEndpoint = new ( "https://postman-echo.com" );
public function main () {
var response = clientEndpoint->get( "/get?test=123" );
}
另一方面,您可以使用芭蕾舞演员语言创建HTTP服务器。 您可以使用内置的安全功能来保护HTTPS链接。
import ballerina/http;
import ballerina/log;
http:ServiceEndpointConfiguration helloWorldEPConfig = {
secureSocket: {
keyStore: {
path: "${ballerina.home}/bre/security/ballerinaKeystore.p12" ,
password: "ballerina"
}
}
};
listener http:Listener helloWorldEP = new ( 9095 , config = helloWorldEPConfig);
@http :ServiceConfig {
basePath: "/hello"
}
service helloWorld on helloWorldEP {
@http :ResourceConfig {
methods: [ "GET" ],
path: "/"
}
resource function sayHello (http:Caller caller, http:Request req) {
var result = caller->respond( "Hello World!" );
if (result is error) {
log:printError( "Error in responding " , err = result);
}
}
}
Ballerina还支持通过HTTP接口进行流式传输。 构建GRPC和基于Web套接字的服务器就像构建HTTP服务器一样简单明了。
当涉及可靠消息传递时,消息代理是集成的最重要方面之一。 如果您需要可靠地发送消息,则可以将Message Broker与Ballerina Integrator一起使用。 Ballerina为ActiveMQ,RabbitMQ和NATS等著名消息代理提供帮助。 您可以仅使用几行Ballerina代码来生成消息和接收消息,这些代码使其成为与所有集成要求一起使用的最佳语言。
结论
在本文中,我试图解释Ballerina作为通用编程语言以及用于集成的专用编程语言的功能。 还有很多功能,例如线程,流,安全性以及对微服务的本机支持,这些我在这里没有解决。 我将在另一篇文章中向您详细说明这些功能。
您可以从他们的 官方网站 了解更多有关Ballerina语言的信息 。 在这里,您可以找到每种用例的示例实现。 您可以在 Twitter 上 关注我, 以了解有关技术知识的更多信息。 转到Ballerina 下载 页面,然后立即尝试。 顾名思义,它灵活,强大,美观。
翻译自: https://hackernoon.com/first-glimpse-of-ballerina-language-language-of-integration-q31x31jv