读编程与类型系统笔记09_泛型数据结构

鸿蒙HarmonyOS应用开发 | 仓颉语言中的泛型编程应用与实践【泛型类型的子类型关系、类型别名、泛型约束】 在许多编程语言中,泛型是一项强大的功能,允许创建灵活且可重用的代码组件。在仓颉语言(Cangjie)中,泛型扮演着重要角色,使开发者能够定义类型安全的抽象。本文将深入探讨仓颉语言中的泛型概念,特别是泛型类型的子类型关系,以及如何利用这些关系来编写更为安全且高效的代码。 阅读详情

 

1. 恒等函数

1.1. 在代数中,恒等函数指的是函数f(x) = x

1.2. 恒等逻辑与getNumbers()和assembleWidgets()的问题域解耦,因为恒等逻辑和问题域是正交的,或者说是独立的

2. 类型参数

2.1. 将不同函数的区别,即它们的实参类型参数化

2.2. 一个泛型名称的标识符,用作客户端在创建泛型实例时指定的具体类型的占位符

3. 可选类型

3.1. 包含某个类型T的值,或者不包含任何内容

3.2. Optional实现

3.3. 当处理没有赋值的情况时,使用的逻辑与该值的实际类型并没有关系

4. 泛型函数 泛型类

4.1. 泛型函数(value:T) => T,它的类型参数是T

4.2. 当为T指定了实际类型时,就创建了具体函数

5. 泛型类型

5.1. 参数化一个或多个类型的泛型函数、类、接口等

5.2. 允许我们编写能够使用不同类型的通用代码,从而实现高度的代码重用

5.2.1. 让代码的组件化程度更高

5.2.2. 创建独立的、可重用的组件

5.2.3. 使用泛型来避免复制代码

5.2.3.1. 复制从来不是一个好的选择

5.3. Optional类型

5.3.1. 一个简单但是强大的泛型类型

6. 数据结构

6.1. 数据自身

6.2. 数据的形状

6.2.1. 二叉树中,以分层的方式布局数据,每个元素最多有两个子元素

6.2.2. 在链表中,数据是顺序布局的,一个元素在前一个元素的后面

6.3. 一组保留形状的操作

6.3.1. 用来添加或移除元素

6.4. 数据结构把形状赋予数据,而并不需要知道这些数据是什么, 使这些结构成为泛型,就允许为各种值重用形状,从而大大减少需要编写的代码量

6.5. 两个关注点

6.5.1. 数据

6.5.1.1. 数据的类型

6.5.1.2. 数据结构的实例保存的实际值

6.5.2. 数据的形状和保留形状的操作

6.5.3. 解耦关注点

7. 泛型数据结构

7.1. 如果能够从库中选择泛型数据结构,就应该使用库中的泛型数据结构

7.2. 处理数据的布局、形状和任何保留形状的操作

7.3. 数据布局的职责交给独立于任何实际数据内容的泛型数据结构

7.4. 与数据是什么没有关系

7.5. 不能解决全部问题

7.5.1. 仍然需要遍历它们

7.6. 对于分离独立的关注点很有用

8. 迭代器

8.1. 能够用来遍历数据结构的一个对象

8.1.1. 遍历策略和数据结构之间并不需要是一一对应的关系

8.1.2. 提供了一个标准接口,将数据结构的实际形状对客户端隐藏起来

8.1.2.1. 为遍历数据结构提供了公共接口

8.2. 把数据结构和算法连接起来的“胶水”

8.3. 迭代器模式十分有用,所以得到了原生支持

8.3.1. Java中的等效接口也叫作Iterator

8.3.2. 在C#中,等效的接口是IEnumerator

8.4. 在定义数据结构时,应该确保它实现了Iterable

8.5. Iterator代表一个迭代器

8.6. Iterable代表可迭代的东西

8.7. 使用生成器可实现迭代器

8.8. 并非必须是有限的,它们可以无限产生值

9. 生成器

9.1. 是一个可恢复的函数,使用yield语句返回控制权,并且当再次被调用时,会从上一次离开的状态恢复执行

9.2. 生成器返回一个IterableIterator,所以我们可以直接在for...of循环中使用它们,或者用它们来实现一个数据结构的Iterable接口

9.2.1. 大部分主流编程语言都有一个等效的特殊类型,用来支持一个能够遍历元素的for循环

9.3. 在实现遍历逻辑时,考虑使用yield

9.3.1. 它通常可以让代码变得更加整洁

9.3.2. Java中没有内置的yield语句

9.3.3. C#支持yield语句

10. 数据流

10.1. 无限数据流的例子

10.1.1. 从键盘读取字符

10.1.2. 从网络连接获取数据

10.1.3. 收集传感器数据

10.2. 把函数链接成处理管道,在可能无限的数据流上运行它们

11. 处理管道

11.1. 通过使用接受和返回迭代器的函数,能够构建处理管道

11.1.1. 一些函数,它们接受一个迭代器作为实参,进行一些处理,然后返回一个迭代器

11.1.2. 这种函数可以链接起来,在收到数据时处理数据

11.2. 反应式编程的基础

11.3. 迭代器是关键,因为它们使我们能够逐个处理值

11.4. 是延迟计算的

论文选题难?7种AI加持的万能选题法(全专业通用+工具实测) AI时代学术选题新范式:7大智能方法破解研究痛点 传统选题方法面临范围失控、资料难寻、创新不足三大痛点,本文提出AI赋能的7种选题方法论: 1.现象+群体法:自动抓取热点与人群特征 2.理论+场景法:经典理论与新兴场景匹配 3.技术+问题法:前沿技术与领域痛点结合 4.对比+变量法:时空维度与变量关系分析 5.热点+理论法:事件传播与理论深挖融合 6.微调+变量法:已有选题变量置换创新 7.AI全流程法:关键要素智能迭代生成 同时警示AI使用的伦理边界,需规避虚构文献、伪造数据等风险,并提供针对本科生、研究 阅读详情

相关推荐

爬虫小例--爬药监局(上)

”明月如霜,好风如水,清景无限 “ 文远最近也算是爬虫入门吧,相信后面会慢慢熟悉。 壹 直接上例子,爬取药监局的数据。目的是得到每家公司的详情数据,例: 具体网址:http://scxk.nmpa.gov.cn:81/xk/ 这是主页,下面详情信息: 贰 分析,通过网页检查发现,主网页上没有公司相关数据,观察XHR中的Ajax请求发现,公司信息都是动态数据(方便更新),点击发现每个公司 的详情信息通过ID号这个参数区别,那么可以确定思路是先得到每个公司的ID号,然后在通过ID对应每一个详细网站,同样右键

john_ashley的博客 4556

C++泛型编程

泛型编程主要使用模板来实现。模板就是允许你编写与类型无关的代码,即对所有传入的数据类型编写通用的实现代码。比如,我想返回传入数据的占内存大小。对这个问题的解决,可以不依赖数据类型,我们都可以通过相同的操作返回结果。函数模板的定义如下代码:注意:每个函数模板都要在其之前使用template<>声明,不可复用。// 指定一个参数类型的函数模板// 指定多个参数类型的函数模板//指定可变参数函数模板模板定义的语法不用多说,但是模板参数有很多知识点需要掌握。类模板的定义形式和函数模板没有太大区别。

ymhdt的博客 1195

【Unity Animation 2D】从零到一:骨骼绑定与IK动画实战指南

本文详细介绍了Unity中2D骨骼绑定与IK动画的实战流程,从角色素材准备、骨骼系统创建到权重绘制和IK设置,逐步指导开发者掌握2D动画制作技巧。通过反向动力学(IK)技术,实现更自然的角色动画效果,适用于游戏开发和动画制作。

weixin_30430677的博客 372

C++泛型编程:源起、实现与意义

泛型编程(Generic Programming)最初提出时的动机很简单直接:发明一种语言机制,能够帮助实现一个通用的标准容器库。所谓通用的标准容器库,就是要能够做到,比如用一个List类存放所有可能类型的对象,这样的事情;熟悉一些其它面向对象的语言的人应该知道,如Java里面这是通过在List里面存放Object引用来实现的。Java的单根继承在这里起到了关键的作用。然而单根继承对C++这样的处

zy1691的专栏 1379

【Windows】 解决联想为主的所有自带摄像头(integrate camera)打不开的毛病(特别点名小新、thinkbook、thinkpad、y7000...)

解决联想系列电脑打不开自带摄像头的问题

Iamruzi的csdn博客 3万+

振动分析中相位的确定

更是定位不平衡量角度的关键。是确定振动信号与转子旋转位置之间时间关系的核心步骤,而。以内,以确保校正配重安装角度的有效性。在实际动平衡中,相位角的误差需控制在。在振动分析和动平衡中,

轩辕霸天L 2735

【Rust 笔记】09-特型与泛型

【Rust 笔记】09-特型与泛型

feiyan的博客 614

ModbusRTU串口读写报文解析

解析MODBUS报文的格式,讨论异常状态、读多个寄存器与写多个寄存器

Serendipitor的博客 9212

浅谈泛型编程

泛型编程最初诞生于C++中,目的是为了实现C++的STL(标准模板库)。其语言支持机制就是模板(Templates)。模板的精神其实很简单:参数化类型。换句话说,把一个原本特定于某个类型的算法或类当中的类型信息抽掉,抽出来做成模板参数T。比如qsort泛化之后就变成了:   template void sort(RandomAccessIterator first, RandomAccess

程序道 -Learning, Thinking and Coding <存储知识的金库> 514

一台NAS两个系统:飞牛nas上完美运行群晖DSM?(飞牛nas+群晖nas套娃安装实操)

想在飞牛NAS上体验群晖DSM系统?💡 本文详细记录了飞牛nas上部署群晖的完整过程,从镜像转换到系统安装,每一步都有详细说明 🖥️,让你在不增加硬件成本的情况下,轻松实现一套硬件、多种系统的灵活部署 ✅

XiaoqiangClub的博客 2376

YOLOv11改进策略【注意力机制篇】| SE、CBAM、ECA、CA、Swin Transformer等注意力机制全面解析与应用

本文详细介绍了五种主流的注意力机制及其在YOLOv11中的应用。通过合理的模块选择和位置部署,注意力机制能够显著提升目标检测性能。

QQ_778132974的博客 877

泛型编程:源起、实现与意义

泛型编程:源起、实现与意义 By 刘未鹏 C++ 的罗浮宫 (http://blog.youkuaiyun.com/pongba) ( 去年 12 月《程序员》的约稿 ) ( 以前也写过一篇相关...

chuifuhuo6864的博客 149

【头歌】链栈的基本操作及应用

另外,在算法的开始和结束时,栈都应该是空的,所以匹配到最后还要判断栈是否为空,若空,则说明匹配成功,返回1。其中表达式只包含三种括号,花括号{}、中括号[]、圆括号(),即它仅由 (、)、[、]、{、}六个字符组成。预期输出: 栈中元素依次为:12 47 5 8 6 92 45 63 75 38 4 29 弹出的栈顶元素 e=29 栈空否:0(1:空 0:否) 栈顶元素 e=4 栈的长度为11 清空栈后,栈空否:1(1:空 0:否)// 若栈不空,则用e返回S的栈顶元素,并返回OK;

qq_39977056的博客 4384

四、09【Java常用类】之Java泛型

今天的博客主题 Java常用类——》Java泛型 Java泛型 Java泛型是在 JDK1.5 提出的一个新特性。 其本质就是:参数化类型,也就是所操作的数据类型被指定为一个参数。 参数我们知道,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。 那参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。 泛型允许对类型进行抽象。 最常...

刘总Java 769

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【10】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-泛型基础全解(泛型函数、泛型接口、泛型类)及参数、接口补充

剩余参数的语法,我们可以将函数或方法中一个不定数量的参数表示为一个数组。

Bew1tch的博客 2646

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

JavaSE09_泛型之泛型方法

泛型之泛型方法

hoonee 422

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

# Unity C#进阶:掌握泛型编程,告别重复代码,编写优雅复用的通用组件!(Day26)

经过前几周对C#基础、面向对象、数据结构以及Unity核心机制的学习,我们已经打下了坚实的基础。今天,我们将迈向一个能显著提升代码抽象层次和复用性的高级主题——泛型编程(Generic Programming)。泛型是C#中一项强大的特性,它允许我们编写与具体数据类型无关的、通用的代码模板。在Unity开发中,熟练运用泛型不仅能减少冗余代码,还能提高代码的类型安全性和性能。

吴师兄大模型的博客 1531

C#学习教程09——泛型

C#学习教程,适合新手小白,附带学习源码。

Kint的博客 776

C++ 泛型 理解

为什么泛型 泛型编程(Generic Programming)最初提出时的动机很简单直接:发明一种语言机制,能够帮助实现一个通用的标准容器库。所谓通用的标准容器库,就是要能够做到,比如用一个List类存放所有可能类型的对象,这样的事情;熟悉一些其它面向对象的语言的人应该知道,如Java里面这是通过在List里面存放Object引用来实现的。Java的单根继承在这里起到了关键的作用。然而单根继承对

FrankieWang008的专栏 1556

2020-09-15-Java泛型中的自限定泛型

Java的自限定泛型 文章目录Java的自限定泛型一、古怪的循环二、自限定三、自限定类型的价值——产生协变参数类型3.1 协变返回类型3.2 自限定泛型事实上将产生确切的导出类型作为其返回值 一、古怪的循环 古怪的循环泛型(CRG):类相当古怪地出现在出现在它的基类中。 我创建一个新类,它继承自一个泛型类型,这个泛型类型接受我的类的名字作为其参数。 class GenericType<T>{} // 古怪的循环: 类相当古怪地出现在它自己地基类中 public class Curiously

hefrankeleyn的博客 274

【侯捷 C++】STL标准库和泛型编程 超详细-万字笔记总结-学习笔记

【侯捷 STL标准库和泛型编程】 超详细 万字笔记总结-学习笔记 STL —— Standard Template Library,标准模板库C++ Standard LIbrary,C++标准库中包含STL(即STL+一些小东西)STL六大部件:容器(Containers)、分配器(Allocators)、算法(Algorithms)、迭代器(Iterators)、仿函数(Functors)、适配器(Adapters)

YRB0127的博客 3526

Effective Java学习笔记--第29、30条优先考虑泛型和泛型方法

这两条主要讲述了泛型对于类与方法的构建能起到很多积极的作用。

weixin_50353846的博客 960

Java泛型

泛型(Generics)是一种允许在类、接口和方法中使用类型参数的机制,从而在编译时保证类型安全,并提高代码的复用性。泛型提供了一种解决类型不安全问题的方法,并使代码更具可读性和可维护性。

冷雪言的博客 1790

深入理解Java泛型:灵活、安全、可重用的编程利器

Java泛型是一项强大的编程特性,为程序员提供了一种灵活、类型安全、可重用的编码方式。通过泛型,我们能够编写更加通用、适应多种数据类型的代码,从而提高了代码的灵活性和可维护性。在这篇博客中,我们将深入探讨Java泛型的各个方面,并通过具体的例子来展示其用法和优势。

阿水的博客 1万+

仓颉编程入门 -- 泛型概述 , 如何定义泛型函数

在仓颉编程语言中,泛型指的是参数化类型,参数化类型是一个在声明时未知并且需要在使用时指定的类型。类型声明与函数声明可以是泛型的。最为常见的例子就是 Array、Set 等容器类型。以数组类型为例,当使用数组类型 Array 时,会需要其中存放的是不同的类型,我们不可能定义所有类型的数组,通过在类型声明中声明类型形参,在应用数组时再指定其中的类型,这样就可以减少在代码上的重复。在仓颉中,class、interface、struct 与 enum 的声明都可以声明类型形参,也就是说它们都可以是泛型的。

几许的博客 829

java 泛型详解(普通泛型、 通配符、 泛型接口)

1、Java泛型 其实Java的泛型就是创建一个用类型作为参数的类。就象我们写类的方法一样,方法是这样的method(String str1,String str2 ),方法中参数str1、str2的值是可变的。而泛型也是一样的,这样写class Java_Generics<K,V>,这里边的...

chunman8888的博客 217
上一篇: C#代码整洁之道读后总结与感想
下一篇: 读编程与类型系统笔记10_泛型算法和迭代器
躺柒
博客等级 码龄4年 7004粉丝 1322原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值