Newer
Older
DungeonShooting / DungeonShooting_Godot / editor / example.ds
  1. //该样例演示如何声明一个类对象
  2.  
  3. //导入简化的命名空间后的类, global 命名空间下的成员不需要导入
  4. import Behavior = example.framework.Behavior;
  5. //同样也可以直接导入简化名称的命名空间
  6. import myName = example.framework;
  7. //导入整个命名空间
  8. import system;
  9.  
  10. //除导入语句外, 脚本第一句必须是这个, 定义该文件所属的命名空间, 但是可以忽略, 默认为 global 命名空间
  11. namespace example.defineClass;
  12. /*
  13. 这一句也必须写在文件的开头, 在声明 namespace 之后,
  14. 在命名空间 example.defineClass 下声明一个叫 MyClass 的类, 继承自 Behavior 类
  15. 当一个文件内写过 class xxx 后, 就表名该文件是一个类, 逻辑代码和声明代码必须写在声明 class后面
  16. */
  17. class MyClass extends Behavior;
  18.  
  19. //在类中声明一个 a 变量, a 如果不赋值的话就默认为 null
  20. var a;
  21. var b = 1.5;
  22. var c = null;
  23. private var d = true; //私有属性
  24. readonly var e = false; //只读属性
  25.  
  26. //在类中声明一个叫 length 的 get 属性, get 属性必须有返回值
  27. get length() {
  28. return b;
  29. }
  30. //在类中声明一个叫 length 的 set 属性, set 属性设置的数据变量叫 param
  31. //param 关键字只能出现在 set 属性中, 并且只读
  32. set length(val) {
  33. b = val;
  34. }
  35.  
  36. //在类中声明一个 say 的函数, 并且支持传入一个参数
  37. func say(str) {
  38. var message = "say: " + str;
  39. print(message);
  40. }
  41. //在类中声明一个 say 的函数重载, 该重载为 0 个参数
  42. //注意, 因为脚本数据类型为弱类型, 无法通过数据类型判断重载, 所以函数重载是根据参数长度来进行重载
  43. func say() {
  44. say("hello");
  45. }
  46.  
  47. //在类中声明构造函数, 其他地方调用 MyClass(); 时就会调用该类的构造函数, 无参构造可省略
  48. //参数重载和函数的规范一致, MyClass() 构造函数可以被视为一个特殊函数, 其他非构造函数不能调用 MyClass() 函数
  49. func MyClass() {
  50.  
  51. }
  52. //构造继承, 构造函数继承该类的无参构造函数
  53. func MyClass(message) extends MyClass() {
  54. print("创建了MyClass, message: " + message);
  55. }
  56.  
  57. //语法展示
  58. private func grammarExample() {
  59. //调用父类函数
  60. super.say();
  61. //判断实例是否是该类型
  62. if (i is Map) {
  63. print("是字典");
  64. } else {
  65. print("不是字典");
  66. }
  67. //for循环100次
  68. for (var i = 0; i < 100; i++) {
  69. continue;
  70. }
  71. //while循环
  72. while (true) {
  73. break;
  74. }
  75. //repeat循环, 执行100次
  76. repeat(100) {
  77. }
  78. //函数表达式
  79. var f1 = (a1) => {
  80. }
  81. //执行函数
  82. f1(1);
  83. //将成员函数存入变量
  84. var f2 = func(say, 1);
  85. //数组
  86. var array = [1, 2, "str"];
  87. //匿名对象, 无法扩展和删除属性, 只能对已有的属性进行赋值
  88. var obj = {
  89. x: 1,
  90. y: -2.2,
  91. list: ["str", true],
  92. };
  93. //字典, 允许扩展和删除属性, 性能比匿名对象低
  94. var map = @{
  95. a: "",
  96. b: 1,
  97. c: false
  98. };
  99. }
  100.  
  101. //静态部分注意, 如果声明了一个叫 a 的非静态成员, 那么就不能声明一个叫 a 的静态变量
  102.  
  103. //在类中声明一个静态的 sa 变量, 并附上初始值 1
  104. static var sa = 2;
  105.  
  106. //静态函数, 参数重载和普通函数的规范一致
  107. static func staticSay() {
  108.  
  109. }