config、option、setting这三者在程序世界里是什么区别?

为什么有的地方是config,有的地方是setting? options 可能容易区分一些。 或者,你们是如何管理项目中的配置文件的?
关注者
617
被浏览
251,556

20 个回答

[201601270900-0800]修改了形参与实参。

[201601260810-0800]增加了形参与实参。

[201601251857-0800]增加了Argument和Preference。

[答案本体]

感谢轮子哥

@vczh

的成句:

Configure some options in the settings.

我来负责解释。

程序所有的可变项叫做Settings。中文译作设置。所有的设置都是“可选项”,Option(选项,不是期权),因为在程序世界里没有真的开放式问题只有选择题(Option)。改变可选项的过程叫做Configure配置(动词)。

附赠:

已确定的Configure结果叫做Configuration配置(名词)。Configure和Configuration都经常缩写为Config。一套既成的可迁移的实现特定目的的Configuration叫做Profile,例如手机里的静音Profile、仅震动Profile。

Profile这个词很不好翻,本意是指一系列对特定个体的不一定全面的描述,翻成轮廓更准确但显然不符合习惯,所以常见翻译是档案。但是又显然,说静音档案、仅震动档案之类的也很不符合习惯,所以实际使用中Profile的翻译跟着场景变化很大。例如蓝牙的各种应用模式原文就是Profile,A2DP Profile什么的,但翻译成了模式。

Property属性,意指实体Entity所具备的性质项目,包括但不限于Settings,还包括它的自然属性。

Attribute也一般译作属性但我个人认为译为特质可能更符合一点。这里引用另一个成句:

Jeff Atwood has the attribute black for the property hair color.

(来源:

meaning - What is the difference between "property" and "attribute"?

也即是说,Property指例如身高、体重、三围等属性,而Attribute指身高180cm、体重180斤、三围XXX等具体的实体的特质。

Parameter参数,函数的变量。

Argument同样翻作参数,但更接近命令参数而非函数的参数。本意是指用来支撑观点的论据,用在命令行语境下指命令的参数。

<del>中文中常用一套对应的术语形式参数(形参)和实际参数(实参)。很多人误解认为Parameter和Argument各自为形参和实参,但这个认识是错误的,个人估计可能是老师乱教。形参与实参既可以是Parameter也可以是Argument,和上面的描述一样取决于使用环境。区分点是形参是Formal Parameter/Argument,而实参是Actual Parameter/Argument。</del>

根据Java的官方说明,以上一段内容并不正确:

Parameters refers to the list of variables in a method declaration. Arguments are the actual values that are passed in when the method is invoked.

(来源:

docs.oracle.com/javase/

也就是说,Parameters指方法定义时的参数(形参),而Arguments指实际传递给方法的参数(实参)。

个人不喜欢这种强行修改语源的定义,不过看来已经是官方确定的用法。据说其他语言也有类似的定义。

Preference偏pian1好hao4,Prefer的名词(具体词法上叫个什么词我不记得了),指设置中依赖于用户喜好的部分,例如软件的皮肤、快捷键等。

欢迎在评论中添加需要翻译的此类术语。

轮子兄造的句不错。

从字面意义来说Config和Setting有点类似。

Config一般是配置,Setting一般是设置。

其实差不了多少。

但硬要区分的话,Config更容易联想为给开发人员使用的,用来避免一些Hard Code的可参数化的设定。

Setting更偏向于使用者或者运维人员使用的设定。比如设置一个端口号,IP地址类似的。


而Option是选项的意思。比如我们设置Socket的时候可以选同步或者异步的模式。


如何管理?

比如ASP.NET Core里面的Sample就不错。你可以指定多个Settings例如

appsetting.json, appsetting.Development.json

appsettings.Prodution.json。可以很好的解决版本库的管理问题。


在使用上我喜欢定义一个config类。然后将配置文件在系统启动的时候或者第一次使用它的时候加载到(反序列化)到这个类的对象。用起来就很方便啦。