类 (class_map)
1.概述
class_map 是 GS 语言中实现轻量化面向对象编程的核心类型,提供了类似 C++/Java 的类机制。本章面向已经掌握 GS 基础语法、了解 map 类型使用,并希望提升代码组织能力开发者。通过本章学习,您将掌握 class_map 的定义、继承、成员变量/函数、特殊函数等核心概念,能够使用面向对象思想使用 class_map 类型编写更轻量化的 GS 程序。
2. class_map 基础
2.1 class_map 概念
class_map 是在 map 类型基础上构建的类系统。从本质上讲,class_map 是 map 的一个特殊子类型(sub_type 为 1),其设计的根本目的是为了解决对象(Object)的实现不够轻量化的问题。class_map 类型的实现类似 C++/java 的类,且只支持单继承模式。以字段明确,易于维护。与类型明确,便于优化实现。
注意
-
我们目前的模式是所有数据集合都放在map中,无论简单的,复杂的,易变的还是不变的,这样的好处是很灵活,我们增加key,减少key,代码都不需要变动,只要生成的地方和使用的地方约定好即可
-
灵活的同时也带来了坏处,时间一久,内容一多,大家都不清楚某个函数传递的map中都有些什么数据,某个对象身上的map中都有些什么数据,只能在runtime的时候去打印,或者来回看代码,很容易出现错漏。
-
很多情况下,一些对象身上的map和函数传递时的map都是比较固定的,如果能有类似struct的数据结构来保存和传递会更易维护,如果IDE支持得好,补全提示也比较好做
-
后续JIT优化的时候,类型都是明确的,不需要预测,会比较好做优化。
-
在使用class_map时,请尽可能保证类型明确。这样编译器可以在编译时尽可能做好类型的检查和约束。
2.2 class_map 声明
class_map 在声明时以class关键字开头的大括号{}内声明与定义class_map 的成员变量及成员函数,示例如下:
class A
{
int a = 0;
public int foo(A self)
{
return self.a;
}
}
实例2-1:class_map 声明示例