递归火山软件开发平台

标题: ★★★火山PC的参考(不知道怎么叫,C++是叫指针)★★★ [打印本页]

作者: wangvoldp    时间: 2024-4-6 14:16
标题: ★★★火山PC的参考(不知道怎么叫,C++是叫指针)★★★

-----------------------------------------------------------------------------------
例如我想写一个带分组的自定列表框
第一层组件布局器,里面放个数组用来存分组
    第二层分组类,里面放个数组用来存列表成员
        第三层列表成员类,1个编辑框和1个矩形类(可能还有其他)

写到最后我想操作第I个分组里的第J个成员里的矩形,我需要这么写
控件名.元素组.取成员(I).元素组.取成员(J).矩形.左边 = 1
控件名.元素组.取成员(I).元素组.取成员(J).矩形.顶边 = 1
上面只是例子实际还要操作其他, 每次操作都要不停地取取取

如果有了局部参考的话, 我们只需取出一次
矩形 = 控件名.元素组.取成员(I).元素组.取成员(J).矩形
矩形.左边 = 1
矩形.顶边 = 1
-------------------------  局部参考实现  ---------------------------
实现局部变量参考打钩后, 将该变量变为指针, 以矩形为例
矩形 矩形类 参考
翻译后如下
矩形类 *矩形
----------------
矩形 = 控件名.元素组.取成员(I).元素组.取成员(J).矩形
翻译后如下
矩形 = &控件名.元素组.取成员(I).元素组.取成员(J).矩形
----------------
矩形.左边 = 1
矩形.顶边 = 1
矩形.重置(1,1,1,1)
翻译后如下
矩形->左边 = 1
矩形->顶边 = 1
矩形->重置(1,1,1,1)
-------------------------  动态窗口实现  ---------------------------
定义窗口时使用参考, 因为是指针可以为空
窗口A 我的窗口类 参考
翻译为
我的窗口类 * 窗口A
----------------
当窗口需要显示时
窗口A = 我的窗口类(参数1, 参数2, 参数3)
翻译为
窗口A = new 我的窗口类(参数1, 参数2, 参数3)
-------
窗口A.创建主窗口(参数...)
翻译为
窗口A->创建主窗口(参数...)
-------------------------  最后  ---------------------------
参考定义时变量多了个 *, 访问时给.换成->
这样函数返回如果是 @视窗.返回参考 = 真 的话也能完美接收
既能实现局部变量随意存取, 挂接事件, 又能实现类的动态创建
就算有1000个窗口,我不创建显示你, 你就不能浪费内存和CPU
另外类的动态创建接收构造参数是个问题, 因为火山的类里面已经有无参的构造函数了

此时涛哥要是能给函数重载和符号重载搞出来岂不是更美,从此火山PC再无短板了




作者: 350246356    时间: 2024-4-6 22:05

作者: htpmcj    时间: 2024-4-6 22:18
确实每次取代码太长了,效率应该也不行!
作者: 小烦    时间: 2024-4-6 22:22
      OK涛哥看不到      提议无效

我听到最多的就是  没空搞    现在在忙着开发火山GO
作者: shuimiao    时间: 2024-4-6 23:27
参考搞起来应该没什么瓶颈吧,不知道为什么一直不愿意?怕东怕西的,怕小白乱用,合着为了小白就可以无视进阶用户的使用需求。再怕那你弄个全局选项,是否开启参考功能啊,或者搞个包属性,是否开启参考,不是很简单的事吗
作者: wangvoldp    时间: 2024-4-6 23:46
小烦 发表于 2024-4-6 22:22
OK涛哥看不到      提议无效

我听到最多的就是  没空搞    现在在忙着开发火山GO ...

帖子就是涛哥审核的他肯定看到了
作者: Xelloss0618    时间: 2024-4-6 23:48
变量参考(引用)和指针是两回事,指针的话,2月份之后的版本已经可以实现了。
可以参考一下我这个例子
https://bbs.voldp.com/thread-20901-1-1.html
作者: Xelloss0618    时间: 2024-4-6 23:50
shuimiao 发表于 2024-4-6 23:27
参考搞起来应该没什么瓶颈吧,不知道为什么一直不愿意?怕东怕西的,怕小白乱用,合着为了小白就可以无视进 ...

火山PC的局部变量参考不能做的原因并不是安全问题,实际上变量参考很安全。
根本原因是火山的表格式定义变量,跟C++变量参考必须初始化赋值,从设计上就不能共存。
作者: wangvoldp    时间: 2024-4-6 23:56
Xelloss0618 发表于 2024-4-6 23:50
火山PC的局部变量参考不能做的原因并不是安全问题,实际上变量参考很安全。
根本原因是火山的表格式定义 ...

那可以用指针的, 引用需要再定义时初始化, 指针不用的, 可以先定义, 然后再赋值
作者: wangvoldp    时间: 2024-4-7 00:11
Xelloss0618 发表于 2024-4-6 23:48
变量参考(引用)和指针是两回事,指针的话,2月份之后的版本已经可以实现了。
可以参考一下我这个例子
htt ...

动态窗口我现在也是用的模板
缺点是定义窗口后必须再多定义一个模板实现类
取出的时候需要一个属性读函数取出
作者: uuyyhhjj    时间: 2024-4-7 03:32
其实多包几层还是能用的,你可以看一下这个例子,参考就是传地址吧,上次指针更新后也全是取,感觉巨麻烦,可读性极差,后来发现把指针再包一层能改善很多
(, 下载次数: 22)

作者: wangvoldp    时间: 2024-4-7 03:58
uuyyhhjj 发表于 2024-4-7 03:32
其实多包几层还是能用的,你可以看一下这个例子,参考就是传地址吧,上次指针更新后也全是取,感觉巨麻烦, ...

感谢回复, 我感觉加上参考真的很有必要, 本来简单东西都被复杂了
作者: cxz7411    时间: 2024-4-7 04:25
太对了,你讲到了火山PC的一个bug
作者: fengyishen    时间: 2024-4-7 05:08
本帖最后由 fengyishen 于 2024-4-7 05:10 编辑

这个问题以前写项目的时候就发现了。在实际写的过程中,我这样找到以下三种方法解决。
方法1、定义局部同类型变量,操作完以后,用命令取对象数据,置对象数据将局部变量数据存到实现组件中。
方法2、将需要频繁操作的组件动态化,就是用命令创建放到参考数据中,这样可以取参考成员。
方法3、将需要操作的组件用命令取对象自身指针,再用命令读指针处对象来操作组件的属性。


作者: shuimiao    时间: 2024-4-7 10:13
wangvoldp 发表于 2024-4-6 23:56
那可以用指针的, 引用需要再定义时初始化, 指针不用的, 可以先定义, 然后再赋值 ...

必须初始化的话,吴总可以定义一个全局指针用来初始化这个参考,然后增加命令,判断参考变量是否为默认指针,这样就知道还没有赋值。后面交给用户自己搞。这种操作也许对于与其他++程序员协同不友好,但是又有几个人真的要与c++协同开发,就算为了协同,只要开启选项支持参考并说明该参考的情况,自己把控不就好了。我感觉吴总完全放不开,不够灵活,c++有限制的就不想搞
作者: wangvoldp    时间: 2024-4-7 13:36
shuimiao 发表于 2024-4-7 10:13
必须初始化的话,吴总可以定义一个全局指针用来初始化这个参考,然后增加命令,判断参考变量是否为默认指 ...

是的, 不过引用缺点也很明显,引用必须在创建时被初始化
如果火山的参考属性 使用 引用的话局限性有点大, 他不能被动态创建和销毁
所以 参考 最佳的 应该是指针, 比如动态窗口
我的窗口类 *窗口
想创建时
窗口 = 我的窗口类(参数)
销毁时(相当于c++的 delete)
释放指针(窗口)

如果使用引用的话就没法办了
作者: 呵呵仙8    时间: 2024-4-7 18:13
wangvoldp 发表于 2024-4-7 13:36
是的, 不过引用缺点也很明显,引用必须在创建时被初始化
如果火山的参考属性 使用 引用的话局限性有点大,  ...

创建对象指针 ()
销毁对象指针 ()
读指针处对象 (, )
你不会是想问,这三个命令如何用吧?

作者: wangvoldp    时间: 2024-4-7 19:33
本帖最后由 wangvoldp 于 2024-4-7 19:41 编辑
呵呵仙8 发表于 2024-4-7 18:13
创建对象指针 ()
销毁对象指针 ()
读指针处对象 (, )
【解决方案】指针动态创建窗口(不创建无消耗) - 火山平台俱乐部 - 火山软件开发平台 - Powered by Discuz! (voldp.com)

要凑乎的话方法是很多,可以用您说的几个个函数,也可以用模板
但对于用户来说到底是打钩一个"参考"简单呢, 还是理解 对象指针 简单呢

作者: 呵呵仙8    时间: 2024-4-7 20:12
参数中!类,本就是自动参考的,基本数值类型才需要传参属性.
作者: 呵呵仙8    时间: 2024-4-7 20:18
本帖最后由 呵呵仙8 于 2024-4-7 20:38 编辑

类变量作参数,可用类的变量名或用类的变量地址. (, 下载次数: 42)

作者: 呵呵仙8    时间: 2024-4-7 20:35
你说的*号和&号.只是各语言特色而己!!吴总一直认为用函数方式返回指针,可以让人更易上手和减少程序员反复调试时间!!
作者: wangvoldp    时间: 2024-4-8 02:10
呵呵仙8 发表于 2024-4-7 20:18
类变量作参数,可用类的变量名或用类的变量地址.

嗯, 是的, 但是咱们两个说的不在一个频道, 我给你举个例子吧
-------- 用对象指针 --------
指针 = 创建对象指针(窗口类)
读指针处对象(指针, 窗口类).创建主窗口()
读指针处对象(指针, 窗口类).自定列表.元素组.清空()
计次循环(10) // 因为列表是动态加入的, 所以每次都要取出元素组的成员数
        读指针处对象(指针, 窗口类).自定列表.元素组.加入并返回新成员2(分组类, 读指针处对象(指针, 窗口类).自定列表.元素组.取成员数(),I)
        读指针处对象(指针, 窗口类).自定列表.元素组.取成员(I).创建组件(分组框, 0,0,0,0)
        读指针处对象(指针, 窗口类).自定列表.元素组.取成员(I).标签.标题 = "我是标题" + 到文本(I)
        读指针处对象(指针, 窗口类).自定列表.元素组.取成员(I).标签.文本颜色 = 0xff0000
        读指针处对象(指针, 窗口类).自定列表.元素组.取成员(I).元素组.加入并返回新成员2(项目类, 读指针处对象(指针, 窗口类).自定列表.元素组.取成员(I).元素组.取成员数(),J)
        读指针处对象(指针, 窗口类).自定列表.元素组.取成员(I).元素组.取成员(J).创建组件(项目框)
        读指针处对象(指针, 窗口类).自定列表.元素组.取成员(I).元素组.取成员(J).编辑框.宽度 = 100
        读指针处对象(指针, 窗口类).自定列表.元素组.取成员(I).元素组.取成员(J).编辑框.高度 = 100
        读指针处对象(指针, 窗口类).自定列表.元素组.取成员(I).元素组.取成员(J).编辑框.内容 = "我是编辑框" + 到文本(J)
读指针处对象(指针, 窗口类).显示()
读指针处对象(指针, 窗口类).关闭()
销毁对象指针(指针)
-------- 有了参考 --------
窗口 = 窗口类()
窗口.创建主窗口()
窗口.自定列表.元素组.清空()
计次循环(10)
        数组1 = 窗口.自定列表.元素组
        成员1 = 数组1.加入并返回新成员2(分组类, 数组1.取成员数(),I)
        成员1.创建组件(分组框, 0,0,0,0)
        成员1.标签.标题 = "我是标题" + 到文本(I)
        成员1.标签.文本颜色 = 0xff0000
        数组2 = 成员1.元素组
        成员2 = 数组2.加入并返回新成员2(项目类, 数组2.取成员数(),J)
        成员2.创建组件(项目框, 0,0,0,0)
        成员2.编辑框.宽度 = 100
        成员2.编辑框.高度 = 100
        成员2.编辑框.内容 = "我是编辑框" + 到文本(J)
窗口.显示()
窗口.关闭()
删除对象(窗口)
--------------------------------------------
这才是两层 第一种方法看着就已经很复杂了, 更别说里面再来几层了,
当然了我们可以多写两个函数一个函数管一层,看着就稍微简单点了
开头也说了简单的用起来也能凑乎用, 层数多了就复杂了, 取来取去
每次读不还得给类名写进去, 就像 Xelloss0618 大大说的那种模板也比这种读指针对象好用,起码只用写一次类名,
这种读指针对象 哪次不得给 类名写进去(去找到类名复制来,当然最强大脑同学可以记住整个项目的全部类名),现在不只得记变量名还得记类名,
哪有解决不了的问题, 大不了用c++写了, 火山调用不就行了
现在说的不是能不能用的问题, 而是方便、简单、直观, 让火山变的更好

作者: 呵呵仙8    时间: 2024-4-8 12:48
wangvoldp 发表于 2024-4-8 02:10
嗯, 是的, 但是咱们两个说的不在一个频道, 我给你举个例子吧
-------- 用对象指针 --------
指针 = 创建 ...

我是业余的.首先,我没了解火山的代码在解释为c++代码再编译时,会不会简化到和c++语法一样或生成EXE会不会存在CAll来CAll现象!
但,明确知道你就是想要一套汉化版c++语法语言!这种想法.我看你还是不要希望了!!目前,我发现的中文编程就只有炫彩IDE比较接近C++那套语法!!
(, 下载次数: 35)
但是,炫彩IDE界面方面,没火山的好用!特别是在想动态创建窗口这方法!!
没有像火山这样的好用:https://bbs.voldp.com/thread-20586-1-1.html

作者: wangvoldp    时间: 2024-4-8 19:02
呵呵仙8 发表于 2024-4-8 12:48
我是业余的.首先,我没了解火山的代码在解释为c++代码再编译时,会不会简化到和c++语法一样或生成EXE会不会 ...

你说我想要C++就当是吧,我也不再给你解释了, 除了PC都支持参考,我建议PC也支持参考是动了您的什么蛋糕么?
这种想法.我看你还是不要希望了
安卓都有的, 想让pc也有,怎么就不报希望了呢. (, 下载次数: 38)





作者: Xelloss0618    时间: 2024-4-8 20:19
C++、JAVA、Golang本身就有差别。
JAVA 和 Golang 的变量参考,都可以先定义后赋值,还可以多次重新赋值,这算是带垃圾回收的特色。
C++就只能在定义参考变量时初始化赋值,而且不能重新赋值。
作者: 呵呵仙8    时间: 2024-4-8 20:46
Xelloss0618 发表于 2024-4-8 20:19
C++、JAVA、Golang本身就有差别。
JAVA 和 Golang 的变量参考,都可以先定义后赋值,还可以多次重新赋值, ...

楼主是想说,为何不给来他来个指针型变量.要他打这么多中文字来写代码很痛苦!!
作者: leing    时间: 2024-4-9 21:09
置指针内容(取变量地址(变量),文本型,“123”)
置指针内容(取变量地址(变量),整数型,12)
  1. <火山程序 类型 = "通常" 版本 = 1 />

  2. 方法 置指针内容 <公开 静态 注释 = "变更指针位置内容" @嵌入式方法 = "">
  3. 参数 欲操作指针 <类型 = 变整数>
  4. 参数 指针数据类型 <@需求类型 = 数据类型 @匹配类型 = 所有类型>
  5. 参数 欲写入数据 <注释 = "提供所欲写入的数据,必须与调用"置指针"方法所提供数据的数据类型相同或匹配." @匹配类型 = 所有类型>
  6. {
  7.     @ *(@<指针数据类型> *)((INT_P)@<欲操作指针>) = @<欲写入数据>;
  8. }
复制代码

作者: qaz2428119    时间: 2024-4-9 21:51
局部参考没法实现这个功能, 因为参考是指针(火山不支持指针), 利用引用符,倒是可以实现,不过局部变量使用引用符,限制很大,需要定义时就要确定引用那个对象,没法动态引用对象

作者: wangvoldp    时间: 2024-4-9 23:54
qaz2428119 发表于 2024-4-9 21:51
局部参考没法实现这个功能, 因为参考是指针(火山不支持指针), 利用引用符,倒是可以实现,不过局部变量使用引 ...
局部参考没法实现这个功能, 因为参考是指针(火山不支持指针)

您所说不支持也是因为访问成员时成员必须->访问吧,
发现是参考的成员访问, 给.换成->行不通么?
对参考对象的直接访问前面需要*, 比如int
作者: cxz7411    时间: 2024-4-10 09:19
建议考虑添加一下子
作者: qaz2428119    时间: 2024-4-11 09:24
wangvoldp 发表于 2024-4-9 23:54
您所说不支持也是因为访问成员时成员必须->访问吧,
发现是参考的成员访问, 给.换成->行不通么?
对参考对 ...

火山不支持 -> 符号 也就没法支持参考
作者: wangvoldp    时间: 2024-4-11 12:20
qaz2428119 发表于 2024-4-11 09:24
火山不支持 -> 符号 也就没法支持参考

是的, 希望涛哥能改的支持吧
作者: 沉默流星    时间: 2024-8-12 06:15
支持
作者: 609177738    时间: 2024-8-12 10:13
https://bbs.voldp.com/thread-22863-1-1.html  这个建议要是实现了,  PC不支持的参考,也能解决, 局部变量是否定义为引用变量也就不那么重要了, 这个建议 纯粹是火山翻译的问题,想解决就一定能解决, 解决不了就是不想,  不过目前看来基本上是没戏, 吴总天天想着小白还有安卓 PC GO 统一, 实际上呢, 毕竟不是一个语言, 很多东西都根本统一不了,  目前也有很多属性没有统一,部分东西仅支持安卓, 但绝对不允许某个东西仅支持PC.....过度的追求统一, 舍本逐末了... 既想要直接支持C++库引用, 又过度限制继承C++的特性...哎 ....




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4