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

仓颉语言实战——1. 类型

仓颉语言实战——1. 类型

在这里插入图片描述

仓颉语言(Cangjie Language)是一个现代化的、简洁而强大的编程语言,它的类型系统为高效开发提供了极大的支持。本篇文章将围绕仓颉语言中的类型系统展开,结合实战代码,帮助开发者快速掌握这一核心特性。

还有对应的学习资源哦:

在这里插入图片描述

类型简介

类型系统是编程语言的基础之一,在仓颉语言中,类型系统不仅直观,而且支持高度灵活的静态与动态类型定义,具备强大的表达能力。

仓颉语言中的类型可大致分为以下几类:

  • 基本类型:如 int, float, bool, string 等。
  • 复合类型:如 list, tuple, dict
  • 用户自定义类型:通过关键字 type 定义。
  • 函数类型:类型化的函数签名。
  • 泛型类型:支持类型参数的定义和使用。
  • 可选类型:通过 Optional 实现。
  • 联合类型:通过 Union 表示多种可能的类型。

接下来,我们通过示例代码逐一介绍这些类型的用法。

可以先在网页端进行在线体验哦:

在这里插入图片描述


基本类型

仓颉语言提供了一些基本类型,它们是所有复杂类型的构建基石。

示例代码

# 基本类型示例
let a: int = 42
let b: float = 3.14
let c: bool = true
let d: string = "Hello, Cangjie!"# 输出各类型变量的值和类型
print(a, type(a))  # 输出: 42 int
print(b, type(b))  # 输出: 3.14 float
print(c, type(c))  # 输出: true bool
print(d, type(d))  # 输出: Hello, Cangjie! string

说明

  • int 表示整型,支持标准数学运算。
  • float 表示浮点型,支持小数表示与计算。
  • bool 表示布尔型,值为 truefalse
  • string 表示字符串类型,支持 Unicode 字符集。

复合类型

复合类型允许开发者将多个值组织在一起,支持更复杂的数据结构。

列表(List)

列表是一种有序的可变集合类型。

# 定义一个整数列表
let numbers: list[int] = [1, 2, 3, 4, 5]# 向列表添加元素
numbers.append(6)
print(numbers)  # 输出: [1, 2, 3, 4, 5, 6]# 遍历列表
for num in numbers:print(num)

元组(Tuple)

元组是一种有序的不可变集合类型。

# 定义一个混合类型的元组
let info: tuple[string, int, bool] = ("Alice", 30, true)# 访问元组元素
print(info[0])  # 输出: Alice
print(info[1])  # 输出: 30
print(info[2])  # 输出: true

字典(Dict)

字典是一种键值对映射类型。

# 定义一个字典
let person: dict[string, string] = {"name": "Alice","city": "Beijing"
}# 访问字典
print(person["name"])  # 输出: Alice# 添加新键值对
person["age"] = "30"
print(person)  # 输出: {"name": "Alice", "city": "Beijing", "age": "30"}

用户自定义类型

仓颉语言允许开发者通过 type 关键字定义自己的类型,以增强代码的可读性和复用性。

示例代码

# 定义一个用户自定义类型
type Person = {name: string,age: int,is_student: bool
}# 使用自定义类型
let alice: Person = {name: "Alice",age: 25,is_student: false
}print(alice.name)  # 输出: Alice

说明

  • 自定义类型使用 type 关键字定义。
  • 支持嵌套其他类型,例如基本类型和复合类型。

函数类型

函数也是一种类型,在仓颉语言中可以通过类型签名进行定义。

示例代码

# 定义一个带类型签名的函数
let add: (int, int) -> int = func(x: int, y: int) -> int {return x + y
}# 调用函数
print(add(10, 20))  # 输出: 30

说明

  • 函数类型签名格式为 (参数类型1, 参数类型2, ...) -> 返回类型
  • 通过函数类型签名,可以对函数参数和返回值进行静态检查。

泛型类型

泛型类型使得代码更加通用化,可以在类型定义中使用类型参数。

示例代码

# 定义一个泛型函数
let reverse: <T>(list[T]) -> list[T] = func(items: list[T]) -> list[T] {return items[::-1]
}# 调用泛型函数
print(reverse([1, 2, 3]))       # 输出: [3, 2, 1]
print(reverse(["a", "b", "c"])) # 输出: ["c", "b", "a"]

说明

  • 泛型通过 <T> 的形式声明类型参数。
  • 可以用于函数、类型定义等多种场景。

可选类型

可选类型允许某个值既可以是某种类型,也可以是 None

示例代码

let find_name: func(id: int) -> Optional[string] = func(id: int) -> Optional[string] {if id == 1:return "Alice"return None
}print(find_name(1))  # 输出: Alice
print(find_name(2))  # 输出: None

说明

  • 可选类型使用 Optional[T] 表示。
  • 可以用来表示可能为空的值。

联合类型

联合类型允许变量可以是多种类型之一。

示例代码

let data: Union[int, string] = 42
print(data)  # 输出: 42data = "Hello"
print(data)  # 输出: Hello

说明

  • 联合类型通过 Union[T1, T2, ...] 定义。
  • 常用于动态场景。

总结

仓颉语言的类型系统强大而灵活,从基本类型到泛型、可选类型和联合类型,它们构建了一个丰富而强大的开发生态。通过合理使用这些类型特性,可以编写出更加健壮、可维护的代码。

本篇文章介绍了仓颉语言中的主要类型及其用法。接下来我们将在后续文章中深入探讨仓颉语言的其他特性,敬请期待!

第三方仓库:三方库

希望通过本篇文章,您对仓颉语言的类型系统有了更深入的理解。如果您有任何疑问或建议,欢迎留言讨论!通过这篇博客,我们详细探讨了仓颉语言的函数特性及其结构类型的强大功能,结合实际示例,展示了如何灵活使用这些特性来编写模块化、可扩展的代码。

在这里插入图片描述

相关文章:

仓颉语言实战——1. 类型

仓颉语言实战——1. 类型 仓颉语言&#xff08;Cangjie Language&#xff09;是一个现代化的、简洁而强大的编程语言&#xff0c;它的类型系统为高效开发提供了极大的支持。本篇文章将围绕仓颉语言中的类型系统展开&#xff0c;结合实战代码&#xff0c;帮助开发者快速掌握这一…...

AWTK 在全志 tina linux 上支持 2D 图形加速

全志 tina linux 2D 图形加速插件。 开发环境为 全志 Tina Linux 虚拟机。 1. 准备 下载 awtk git clone https://github.com/zlgopen/awtk.git下载 awtk-linux-fb git clone https://github.com/zlgopen/awtk-linux-fb.git下载 awtk-tina-g2d git clone https://github.co…...

MySql幻读问题

认识具有反复性。 之前以为理解了幻读&#xff0c;最近看黑马的mysql教程以为再次加深了认识。然而现在认为之前的理解都是错误的&#xff0c;而且网上很多关于幻读的解释&#xff0c;都不太准确。 关于幻读的最佳解释还是要看官网mysql官网幻读解释 脏读和不可重复读比较好理…...

(南京观海微电子)——GH7009开机黑屏案例分析

一、 现象描述&#xff1a; 不良现象: LVDS模组&#xff0c;开机大概2秒后就黑屏。 二、问题分析 等主机进入Kernel 后做以下测试&#xff1a; 1、手动reset LCM 后 可以显示正常&#xff1b; 总结&#xff1a; 1&#xff09;uboot 部分HS 太窄&#xff0c;仅有4个clk宽度&am…...

【Rust自学】7.4. use关键字 Pt.2 :重导入与换国内镜像源教程

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 7.4.1. 使用pub use重新导入名称 使用use将路径导入作用域内后。该名称在词作用域内是私有的。 以上一篇文章的代码为例&#xff1a; m…...

前端学习DAY28(水平)

元素水平方向的布局 元素在其父元素中水平方向的位置有以下几个属性共同决定 margin-left border-left padding-left width padding-right border-right margin-right 一个元素在其父元素中&#xff0c;水平布局必须要满足以下的等式 margin-left border-left …...

【MyBatis】day01搭建MyBatis框架

目录 第一章 初识Mybatis 第二章 搭建Mybatis框架 第三章 Mybatis核心配置详解【mybatis-config.xml】 第一章 初识Mybatis 1.1 框架概述 生活中“框架” 买房子 笔记本电脑 程序中框架【代码半成品】 Mybatis框架&#xff1a;持久化层框架【dao层】 SpringMVC框架&…...

yolov7算法及其改进

yolov7算法及其改进 1、YOLOV7简介2、ELAN架构设计2.1、Partial Residual Networks2.1.1、Masked Residual Layer2.1.2、Asymmetric Residual Layer 2.2、Cross Stage Partial Networks2.2.1、Cross stage partial operation2.2.2、Gradient flow truncate operation 2.3、Effi…...

spring cloud微服务-OpenFeign的使用

OpenFeign的使用 openFeign的作用是服务间的远程调用 &#xff0c;比如通过OpenFeign可以实现调用远程服务。 已经有了LoadBalancer为什么还要用openFeign? 在微服务架构中&#xff0c;LoadBalancer和OpenFeign虽然都提供了服务间调用的能力&#xff0c;但它们的设计目的和…...

【汇编】关于函数调用过程的若干问题

1. 为什么需要bp指针&#xff1f; 因为bp是栈帧的起始地址&#xff0c;函数内的局部栈变量&#xff0c;采用相对bp的内存寻址。不能相对于sp&#xff0c;sp是一直在变的。 2. 函数调用过程&#xff1f; 函数开始&#xff0c;先压栈bp&#xff0c;保存父函数栈底指针bp&#…...

针对Kali 系统进行分区设置

手动设置分区 Kali 安装之腾讯云经验遇到坑_腾讯云安装kali-CSDN博客 安装过程中的几处关键点,文字总结如下&#xff1a; ①分区--手动 ②是否创建空的分区表 ---yes ③选择---创建一个新的分区 ④大小--默认-----主分区 ⑤分区类型----系统&#xff09;一个逻辑分区 ⑥是否…...

C语言简单测试总结

前言 在学C语言之前回顾一下C中的一些知识.选用的是中国大学MOOC中C程序设计(面向对象进阶)中的C语言水平评估测试题. 题目 ​The keyword "unsigned" can modify the keyword [ B ] A.signed B.long C.long double D.float题解:unsigned是无符号的意识,通常在…...

Android OpenGl(二) Shader

一、Shader 1、什么是Shader&#xff0c;为什么要使用Shder &#xff08;1&#xff09;shader运行在gpu上的小程序 &#xff08;2&#xff09;以前使用固定管线&#xff0c;但缺点是灵活度不够&#xff0c;无法满足复杂需求&#xff0c;为了解决固定管线的缺点&#xff0c;出…...

DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(1)

DevOps实战&#xff1a;用Kubernetes和Argo打造自动化CI/CD流程&#xff08;1&#xff09; 架构 架构图 本设计方案的目标是在一台阿里云ECS服务器上搭建一个轻量级的Kubernetes服务k3s节点&#xff0c;并基于Argo搭建一套完整的DevOps CI/CD服务平台&#xff0c;包括Argo CD…...

【已解决】“Content-Security-Policy”头缺失

1、作用 简称CSP&#xff0c;意为内容安全策略&#xff0c;通过设置约束指定可信的内容来源&#xff0c;降低异源文件攻击&#xff0c;例如&#xff1a;js/css/image等 2、相关设置值 指令名 demo 说明 default-src self cdn.example.com 默认策略,可以应用于js文件/图片…...

win系统B站播放8k视频启用HEVC编码

下载HEVC插件 点击 HEVC Video Extension 2.2.20.0 latest downloads&#xff0c;根据教程下载安装 安装 Random User-Agent 点击 Random User-Agent 安装 配置 Random User-Agent 在youtube中会导致视频无法播放&#xff0c;我选择直接屏蔽了 B站设置...

快速理解24种设计模式

简单工厂模式 建立产品接口类&#xff0c;规定好要实现方法。 建立工厂类&#xff0c;根据传入的参数&#xff0c;实例化所需的类&#xff0c;实例化的类必须实现指定的产品类接口 创建型 单例模式Singleton 保证一个类只有一个实例&#xff0c;并提供一个访问他它的全局…...

为什么深度学习和神经网络要使用 GPU?

为什么深度学习和神经网络要使用 GPU&#xff1f; 本篇文章的目标是帮助初学者了解 CUDA 是什么&#xff0c;以及它如何与 PyTorch 配合使用&#xff0c;更重要的是&#xff0c;我们为何在神经网络编程中使用 GPU。 图形处理单元 (GPU) 要了解 CUDA&#xff0c;我们需要对图…...

Yocto 项目中的交叉编译:原理与实例

Yocto 项目是一个强大的工具集&#xff0c;它专注于为嵌入式系统生成定制的 Linux 发行版。交叉编译在 Yocto 项目中扮演着核心角色&#xff0c;它使得开发者能够在功能强大的宿主机上构建适用于资源受限目标设备的软件系统。这篇文章将从运行原理、实际案例和工具链组成等角度…...

Python入门:7.Pythond的内置容器

引言 Python 提供了强大的内置容器&#xff08;container&#xff09;类型&#xff0c;用于存储和操作数据。容器是 Python 数据结构的核心部分&#xff0c;理解它们对于写出高效、可读的代码至关重要。在这篇博客中&#xff0c;我们将详细介绍 Python 的五种主要内置容器&…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...