学编程一直没明白一件事,为什么参数要传来传去的?

我理解的在JS语言解释起来比较麻烦,毕竟单线程,如果是支持多线程的语言,考虑并发与并行,这个问题就显而易见。

那我问你一个问题,你需要调用一个方法,假如是获取玩家血量的,你不传一个用户Id你怎么用?

你家里的所有的工具 厨具 瓶子罐子 各种包,都是放到表面上 一眼就能看到的地方吗?还是说分类放到各个柜子里 抽屉里 箱子里?用到的时候 去相关的地方拿?

1赞

我也不明白一件事,为什么要建那么多脚本,所有功能都写一个脚本里不行吗?

1赞

这种肯定是不好用的。只在一些特定情况下用。比如说登录成功后的用户登录凭证,你存完,别的模块去取。

但大多数情况下是不传参肯定是不好的。
一个是调试的时候,传参的话断点能直接看到传进来的参数,不用跳转去看外部数据。
另一个是可以对函数进行内部测试。而不依赖外部变量。保证输入正确的时候,输出就正确。
最后一个就是,能保证修改数据特性的时候,影响范围尽可能小,你修改的工作量就小。

最后,好不好别人说得都没用,你得用时间去堆出你自己的经验。

1赞

明白了, 我主要觉得一个功能,需要一层层传递, 而很多中间层完全只是一个传递者.不想让他们参与进来

比如: 进入角色面板, 需要传递角色数据, 首先要创建角色面板, 这个预制体创建的类, 完全不应该持有角色数据

你举的这个例子是要有一个数据中心。
角色 UI 可以不传参,直接拿 DataCenter 的数据去渲染就可以了。

一个战斗界面------>从battle manager获取数据
两个战斗界面共存------>带战斗id从battle manager获取数据
战斗界面中的玩家点击弹出玩家信息------>带战斗id和玩家id从battle manager获取数据,还是直接点按钮塞数据给玩家信息界面。
到最后功能越来越多,信息管理就越来越复杂了

这样行不行, 树状结构 , 虽然参数多层传递, 但是模块间完全封闭, 只和上级模块交互, 很容易替换更改,

要保证每个模块的独立性

施主,你着相了。

纯纯的新手啊,那不就是全部都用全局变量了么,一旦多起来,无药可救.

传来传去的叫参数,主动去取的叫状态。

参数的好处时,使用方不用去管数据的来源,别人给你什么你用什么,如果你要用的数据可能有多个来源,那么你把数据抽象成参数来使用,就只需要便携一次同样逻辑的代码。而如果你在这种场合使用状态,你就得为每一个数据来源分别写一遍同样的逻辑。
这不仅仅是麻烦的问题,问题在于,如果这个使用数据的逻辑需要做修改变更,你能保证把“针对每个数据来源”编写的“相同的多份数据处理代码”都找出来,做统一修改么?显而易见,随着数据来源变得越来越多,修改逻辑的麻烦程度将会越来越高,保证修改正确不出错的概率也会越来越低。
因此,需要对多数据来源统一处理时,你应该用参数。逻辑调用方把数据取来,作为参数传给数据使用方,数据使用方无需关心去哪里取数据,调用放给过来什么,就用什么。

状态的好处就像你说的,当这段逻辑被使用时,不管是何时,总能在同样的地方,用同样的方法,获取到需要的数据。当数据来源单一,但是何时使用数据却无法确定,比如你需要等一个回调函数调回来以后再来用这个数据时,状态的好处就显现出来了:你可以直接去取现在最新的数据,而不是像参数一样只能处理过去传过来的数据。
因此,当数据来源单一,但何时真正使用却不确定,尤其是,调用处理逻辑,和处理逻辑实际处理之间还存在一定的时间差,这个时间差可能导致你需要关心被处理数据的实时性时,那就需要用状态了。

那么问题来了,如果我的数据来源也不单一,处理逻辑被调用后,何时真正使用数据也不确定,这怎么办呢?这里就有两个技术手段:
一个叫面向对象,就是用this指针表示某个数据来源,然后按照相同的方式针对每个this,把状态写入它的属性中,这样处理逻辑只要知道this是哪一个对象,就能正确找到并使用状态。
另一个技术手段叫闭包,即我最初传入的数据并不是最后真正使用的数据,而是我创建局部状态的依据,处理逻辑被调用后,首先定义几个局部变量来当作状态使用,根据传入数据为他们设定一定的初始值,但随着处理逻辑的进行,这些状态的值随时可能发生变化。当你真正使用数据时,你就可以去读取这些闭包中的状态变量,来获取它们当前真正的值了。

软件开发的领域没有银弹,到底是使用参数或状态,还是对象或闭包,一切技术决策都要根据你对需求的分析结果来做出。选对了,代码就会简单易懂好维护,选错了,代码就会晦涩难读易出错,做出正确的技术决策,是只有在软件开发实践中才能逐步掌握的能力。

4赞

a 传给b c d可以通过拷贝, b c d随意修改数值都不会影响a,想要改变a可以引用传递,灵活使用。共用a,任意一个地方修改了a,所有地方都会发生修改,不是很安全,想要共用,a必然是全局的变量,尽量减少全局变量的使用。

1赞

:+1: :+1: :+1: :+1: :+1:

从高一开始,就教f(X) = ax+bx+c,f(x)称为函数,是一个流水生产线,还能f(f(x)),一个黑箱子,只管放入材料得出结果,看来你的高中数学一般

你可以把所有代码全部写一个脚本里面,这样所有方法和变量都是共享的尼,所有函数都不需要传参了尼

耦合程度就不一样;
你说的方式是公共耦合,耦合程度高;
而传参的方式是数据耦合,通过数据参数来交换信息,耦合程度低

变量都放在一个地方,那不是要手动GC

那样,恶心的不仅是后人,恶心的也是自己