当前位置: 首页 > news >正文

华为仓颉编程语言正式发布,仓颉编程教程

目录

前言

基本概念

标识符

变量

类型

基础数据类型

表达式

if 表达式

while 表达式

for-in 表达式

程序结构

函数

定义函数

调用函数

lambda表达式

应用实例(遍历目录)

枚举

定义与实例化

成员访问规则

match表达式

应用实例(表达式计算)

Option

结构体

定义与实例化

成员访问规则

应用实例(二叉树)

定义与实例化

成员访问规则

继承

属性

值类型与引用类型

接口与扩展

接口

实现接口

扩展

泛型

异常处理

异常类型

构造和抛出异常

异常处理

并发编程

线程模型

创建线程

应用实例(估算圆周率)

跨语言互操作

仓颉 C 互操作基本步骤

类型映射(基础类型)

类型映射(其他类型)

应用实例

概述

定义与调用

在编译时修改程序

应用实例(语言扩展)

总结


前言

华为在 2024 年 6 月 21 日的华为开发者大会上,华为终端 BG 软件部总裁龚体正式官宣了华为自研仓颉编程语言,并发布了 HarmonyOS NEXT 仓颉语言开发者预览版。

仓颉开发者官网:仓颉 | 华为开发者联盟

仓颉编程语言文件后缀名为 .cj, 以下是第一个入门代码输出:你好,仓颉

基本概念

标识符

变量

变量建一个名字和一个特定类型的值关联起来

类型

类型就像一份协议,规定了一块数据的组织结构及相应的解析/操作方式

基础数据类型

表达式

表达式是可以求值的程序元素,可用于变量赋值、函数传参和返回值等场景

if 表达式

while 表达式

for-in 表达式

程序结构

包(package)是仓颉程序的最小编译单元,一个包由一到多个源文件组成,在每个源文件中可以声明当前文件所属包,也可以导入其他包,由此实现程序的高效管理和复用

在包的顶层作用域中,可以定义一系列的变量、函数和自定义类型(枚举,结构体,类,接口),以及包的声明与导入等,其中的变量和函数被称为全局变量全局函数

在非顶层作用域中可以定义变量和函数,称为局部变量局部函数。自定义类型中的局部变量和函数,称为成员变量成员函数。

函数

定义函数

调用函数

lambda表达式

lambda表达式可以让函数的创建和使用更加灵活,lambda表达式的值就是一个匿名函数

应用实例(遍历目录)

枚举

定义与实例化

成员访问规则

match表达式

应用实例(表达式计算)

Option

结构体

定义与实例化

成员访问规则

应用实例(二叉树)

定义与实例化

成员访问规则

继承

属性

值类型与引用类型

接口与扩展

接口

实现接口

扩展

泛型

异常处理

异常类型

仓颉提供了Exception和Error两个类型,用于描述程序运行时的异常行为

开发者可以继承Exception或其子类来自定义异常类,但不能继承Error或其子类。

构造和抛出异常

构造异常即是构造异常类实例,在throw关键字后接一个异常类实例,即可抛出此异常

异常处理

并发编程

线程模型

仓颉语言实现了M:N 轻量线程模型,支持在少量系统线程之上创建海量用户线程,在实现层面用户线程对应协程,仓颉runtime会自动管理和调度这些协程。

当用户线程t做I/O 等资源访问操作时,若资源尚未就绪,线程t就会被runtime挂起等待、并调入其他线程运行,当资源就绪后又会适时恢复t的执行,高效利用CPU 资源,实现高并发能力。

创建线程

应用实例(估算圆周率)

跨语言互操作

仓颉 C 互操作基本步骤

类型映射(基础类型)

在声明C 函数时,核心在于仓颉如何描述C 数据类型,因此我们需要知道C 与仓颉的类型映射关系

类型映射(其他类型)

在标准库中为CString和CPointer 扩展了一些成员函数,便于操作C 字符串和指针

应用实例

概述

在程序编译阶段,会产生很多有用的信息,可用于程序的分析、优化和功能扩展等。为此仓颉提供了“宏”特性,允许开发者介入编译过程,获取部分编译期信息并修改程序,可以实现埋点插桩、静态反射和语法扩展等功能

定义与调用

在编译时修改程序

应用实例(语言扩展)

总结

本篇文章例举了华为的新产品,仓颉编程,以及仓颉变成的基本使用方法和一些内置的操作方式,包括可以跨语言互操作,拥有并发编程等功能。

仓颉入门教程:华为开发者学堂

白皮书:文档中心

感谢大家的细心阅读,求三连

相关文章:

  • eNSP-VLAN虚拟局域网
  • Werkzeug库介绍:Python WSGI工具集
  • 数据开发人员如何真正理解业务、并构建业务模型?
  • 百日筑基第十一天
  • 【Linux进阶】文件和目录的默认权限与隐藏权限
  • vue ref怎么实现基本数据类型和复杂数据类型响应式
  • 实验六 SQL数据查询—单表查询
  • 如何对关键字段进行脱敏(二)如何在某些查询中取消脱敏?
  • 微信小程序实现扫码功能
  • PDM系统中物料分类与编码规则生成方案
  • 微服务架构是什么?他有什么优缺点。其实的安全问题如何解决?
  • 前端学习(四)css修饰文字和背景
  • 在Windows 11上更新应用程序的几种方法,总有一种适合你
  • windows搭建mqtt服务器,并配置DTU收集传感器数据
  • 【计算机网络】网络层(作业)
  • C语言笔记(第一章:C语言编程)
  • hadoop集群管理系统搭建规划说明
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Koa2 之文件上传下载
  • learning koa2.x
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • vue-router的history模式发布配置
  • Vue组件定义
  • 创建一个Struts2项目maven 方式
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 机器学习中为什么要做归一化normalization
  • 七牛云假注销小指南
  • 使用权重正则化较少模型过拟合
  • 系统认识JavaScript正则表达式
  • 因为阿里,他们成了“杭漂”
  • 容器镜像
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #define用法
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • #预处理和函数的对比以及条件编译
  • (1)SpringCloud 整合Python
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (31)对象的克隆
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (BFS)hdoj2377-Bus Pass
  • (力扣题库)跳跃游戏II(c++)
  • (六)激光线扫描-三维重建
  • (南京观海微电子)——COF介绍
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (算法设计与分析)第一章算法概述-习题
  • (五)关系数据库标准语言SQL
  • (转)iOS字体
  • (转)母版页和相对路径
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .net core使用EPPlus设置Excel的页眉和页脚
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .net程序集学习心得