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

目录

前言

基本概念

标识符

变量

类型

基础数据类型

表达式

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 字符串和指针

应用实例

概述

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

定义与调用

在编译时修改程序

应用实例(语言扩展)

总结

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

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

白皮书:文档中心

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/755947.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python现在可以在线编程了!

你好,我是郭震 1 在线编程 在线编程好处: 1 无需安装和配置环境: 在线编程平台不需要用户在本地安装任何软件或配置开发环境。这对初学者和那些希望快速上手进行编程的人非常有利。 2 跨平台兼容性: 这些平台可以在任何具有互联网连接的设备上使用&#…

恢复机制-数据库系统中的故障(事务故障、系统故障、介质故障)、一致性错误、窃取但不强制的缓冲区管理策略

一、引言 数据库管理系统DBMS的事务处理技术实现的一个主要功能部分就是恢复机制,恢复机制完成的功能就是对发生故障后系统中事务的更新结果进行数据恢复,保证事务的原子性和持久性,从而进一步保证数据库的一致性。 数据库系统与其他计算机系…

Websocket解析及用法(封装一个通用订阅发布主题的webSocket类)

1、什么是WebSocket? websocket的目标是通过一个长连接实现与服务器全双工,双向的通信。是一种在单个TCP连接上进行全双工通信的协议,使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 js中创建websocket…

日期类(java)

文章目录 第一代日期类 Date常用构造方法SimpleDateFormat 日期格式化类日期转字符串(String -> Date)字符串转日期 (String->Date) 第二代日期类 Calendar常用字段与如何得到实例对象相关 API 第三代日期类(LocalDate\TIme)日期,时间&…

【详细教程】如何使用YOLOv10进行图片与视频的目标检测

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

什么是DEQ?

DEQ (Delivered Ex Quay, Duty Paid) 是指目的港码头交货 (……指定目的港)。 这种术语规定卖方在指定目的港码头将货物交给买方处置,并且不办理进口清关手续。 DEQ适用范围 DEQ术语仅适用于海运、内河运输或多式联运,并且在目的港码头卸货时使用。如…

uniapp,uni-fab组件拖动属性,替代方案

文章目录 1. 背景2. 替代方案2.1 方案一2.2 方案二参考1. 背景 最近基于uniapp开发一款设备参数调试的APP软件,其中有使用到悬浮按钮,快速开发阶段,为了能尽快上线,直接使用了uni-ui的扩展组件uni-fab,参考【1】,效果如下图: 后期,相应的界面内容增多,由于uni-fab是…

简单科普-GPT到底是什么?

1.ChatGPT ChatGPT(全名:Chat Generative Pre-trained Transformer),是OpenAI研发的一款聊天机器人程序 ,于2022年11月30日发布 。ChatGPT是人工智能技术驱动的自然语言处理工具,它能够基于在预训练阶段所见…

通天星CMSV6车载监控平台CompanyList信息泄露漏洞

1 漏洞描述 通天星CMSV6车载视频监控平台是东莞市通天星软件科技有限公司研发的监控平台,通天星CMSV6产品覆盖车载录像机、单兵录像机、网络监控摄像机、行驶记录仪等产品的视频综合平台。通天星科技应用于公交车车载、校车车载、大巴车车载、物流车载、油品运输车载、警车车…

昇思25天学习打卡营第5天|MindSpore-ResNet50图像分类

MindSpore-ResNet50图像分类 CIFAR-10数据集 CIFAR-10数据集是一个广泛使用的图像分类数据集,它包含了60,000张32x32的RGB彩色图像,分为10个类别,每个类别有6,000张图像。这些类别包括飞机(airplane)、汽车(automobile)、鸟类(bird)、猫(cat)、鹿(deer)、狗(dog…

最新测评!不可错过的三款网络代理服务商

在如今数字化高速发展的时代,网络代理服务已经成为许多企业和个人在进行网络活动时不可或缺的工具。为了给大家提供更具参考价值的推荐,我们的测评团队经过深入研究和实际测试,精心挑选了三款表现出色的网络代理服务商——极光HTTP、全民HTTP…

软件工程 例题

用例图 1. 某个学生成绩管理系统的部分参与者和用例总结如下。 教务管理人员: 登录系统教师、学生名单管理学期教学计划管理成绩管理。课程分配,每次课程分配时都必须打印任课通知书 学生: 登录系统选课。 教师: 登录系统成绩管理,并…

昇思25天学习打卡营第3天|网络构建

学习目标:熟练掌握网络构建方法 了解mindspore.nn 实例构建简单的神经网络 网络模型中各层参数 昇思大模型平台 AI实验室 学习记录: 一、关于mindspore.nn 在MindSpore中,Cell类是构建所有网络的基类,也是网络的基本单元。cell…

如何集成CppCheck到visual studio中

1.CPPCheck安装 在Cppcheck官方网站下载最新版本1.70,官网链接:http://cppcheck.sourceforge.net/ 安装Cppcheck 2.集成步骤 打开VS,菜单栏工具->外部工具->添加,按照下图设置,记得勾选“使用输出窗口” 2.…

高效数据采集监控平台 一体化平台 数据可视化!

提高工作效率,一直是各种厂家在寻找的方法。任何一种有效且实用的方法都值得去尝试。数据采集监控平台是一种能高效处理数据的方式,其主要工作内容是从各个产生数据的仪器设备传感器中采集数据、对数据进行集中整理整合、分析、显示、绘制图表、存储、传…

ubuntu22.04速装中文输入法

附送ubuntu安装chrome wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb sudo dpkg -i google-chrome-stable_current_amd64.deb

如何做互联网项目需求评估?

关于互联网项目需求评估,我们可以按照以下步骤进行: 一、确定项目主题和目标受众:这篇文章首先要明确你要评估的互联网项目的主题是什么,你的目标受众是谁?你需要对项目的背景和目的有清晰的了解。 二、项目规模和内…

将TensorFlow嵌入到Jupyter Notebook中,个人学习记录

起因是学习吴恩达机器学习过程中,在神经网络tensorflow的部分,需要在Jupyter Notebook中跑相关的代码,于是在网上找了很多资料,终于跑成功了。该笔记仅为个人学习记录,如有任何问题请见谅。 import numpy as np impor…

如何3分钟上手传得神乎其神的AI绘画!一篇文章带你搞懂!

前言 今年 AI 绘画绝对是大火的概念之一,这次加入了生财 AI 绘画小航海的船,今天是体验的第1天,那么 AI 绘画是什么呢? 简单来说就是利用 AI 实现绘画,在特定的软件或者程序中,输入一定的关键词或者指令&…

【地理库 Turf.js】

非常全面的地理库 , 这里枚举一些比较常用,重点的功能, 重点功能 提供地理相关的类:包括点,线,面等类。 测量功能:点到线段的距离,点和线的关系等。 判断功能: 点是否在…