Questions tagged «initialization»


5
我应该通过参数还是通过返回值初始化C结构?[关闭]
我工作的公司正在通过初始化函数来初始化所有数据结构,如下所示: //the structure typedef struct{ int a,b,c; } Foo; //the initialize function InitializeFoo(Foo* const foo){ foo->a = x; //derived here based on other data foo->b = y; //derived here based on other data foo->c = z; //derived here based on other data } //initializing the structure Foo foo; InitializeFoo(&foo); 我遇到了一些尝试初始化我的结构的问题: …

2
为什么Swift不需要分号?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我通常使用c#或Objective-C进行编码,最近我开始学习Apple的新编程语言-Swift。 我注意到的第一件事是,您不需要在Swift中添加分号来结束一行,但是如果您这样做了-至少从我的测试中可以看出,它不会干扰编译器。 当我写: int someNumber = 0; 在Objective-C中,分号告诉程序该行结束并且不会掉线到下一行。 使用Swift我可以用 var someNumber:Int = 5 而不添加分号,系统便知道这是行的结尾。 是什么让某些语言可以这样做而其他语言则不能呢?为什么不保持统一的系统,在末尾添加分号?


1
使默认构造函数不可用就可以了吗?
具体询问默认构造函数 考虑到构造函数会初始化一个对象的所有数据,如果我创建了一个未经适当初始化就无法使用的类,那么默认构造函数是否就没有用?考虑: // A class for handling lines in a CSV file class CSV_Entry { private: unsigned num_entries; std::string string_version; std::vector<std::string> vector_version; ...etc public: CSV_Entry(); CSV_Entry(const std::string& src_line); // returns a vector copy of the original entry std::vector<std::string> get_vector_snapshot(); } int main( void ) { ...etc CSV_Entry example = CSV_Entry(); …

5
Web应用程序启动时间真的那么重要吗?
与某人进行了一次对话,讨论在应用程序启动时添加一些初始化代码,他抱怨说这会导致启动时间增加。他不能说出一个真正的原因(不知道是什么感觉)。这不是一个使用率很高的应用程序,大约需要一分钟左右的时间才能开始,我们每年都会部署几次。 我记得很早以前就读过有关此类问题的建议,人们建议在启动时进行初始化,而不要在带有“如果您能负担得起罚款”字样的页面访问上进行初始化。 我使用的网络应用程序的使用时间从30秒到4-5分钟不等,但是一旦上网,它们就会摇摇欲坠。 那我想念什么呢?除非它是至关重要的应用程序,例如……我不知道……对于金融市场,医疗应用程序,太空探索等,启动时间真的那么重要吗? PS:我严格来说是指Web应用程序,而桌面应用程序注定会迅速启动。

6
如何编写可能无法正确实例化对象的构造函数
有时您需要编写可能会失败的构造函数。例如,假设我要实例化带有文件路径的对象,例如 obj = new Object("/home/user/foo_file") 只要路径指向适当的文件,一切都很好。但是,如果字符串不是有效路径,则应该中断。但是如何? 你可以: 抛出异常 返回空对象(如果您的编程语言允许构造函数返回值) 返回一个有效的对象,但带有一个标志,指示其路径设置不正确(ugh) 其他? 我假设各种编程语言的“最佳实践”将以不同的方式实现此目标。例如,我认为ObjC更喜欢(2)。但是(2)不可能在C ++中实现,在C ++中,构造函数必须将void作为返回类型。在这种情况下,我认为使用(1)。 您可以使用您选择的编程语言来说明如何处理此问题并解释原因吗?

2
在php中初始化类成员的最佳实践
我的构造函数中有很多这样的代码:- function __construct($params) { $this->property = isset($params['property']) ? $params['property'] : default_val; } 这样做比在属性定义中指定默认值好吗?即public $property = default_val?有时默认值存在逻辑,某些默认值取自其他属性,这就是为什么我在构造函数中执行此操作。 我应该使用设置器,以便将默认值的所有逻辑都分开吗?


4
CQRS + ES中的对象应该在哪里进行完全初始化:在构造函数中,还是在应用第一个事件时?
在OOP社区中似乎已经达成广泛的共识,即类构造函数不应将对象部分或什至完全未初始化。 我所说的“初始化”是什么意思?粗略地讲,原子过程将新创建的对象带入其所有类不变式都成立的状态。它应该是发生在对象上的第一件事(每个对象只能运行一次),并且任何内容都不应该拥有未初始化的对象。(因此,经常建议在类构造函数中执行对象初始化。出于同样的原因,Initialize方法常常被皱眉,因为这些方法打破了原子性并使得可以持有和使用尚未使用的对象成为可能。处于定义良好的状态。) 问题:当CQRS与事件源(CQRS + ES)结合使用时,对象的所有状态变化都被捕获在一系列有序的事件(事件流)中,我想知道对象何时真正达到完全初始化的状态:在类构造函数的末尾,还是在将第一个事件应用于对象之后? 注意:我避免使用“聚合根”一词。如果愿意,在阅读“对象”时将其替换。 讨论示例:假定每个对象由某个不透明Id值唯一标识(请考虑GUID)。可以使用相同的Id值在事件存储中标识表示该对象状态变化的事件流:(不用担心正确的事件顺序。) interface IEventStore { IEnumerable<IEvent> GetEventsOfObject(Id objectId); } 进一步假设有两种对象类型Customer和ShoppingCart。让我们关注ShoppingCart:创建时,购物车为空,必须与一个客户完全关联。最后一点是类不变式:ShoppingCart与a无关的对象Customer处于无效状态。 在传统的OOP中,可以在构造函数中对此建模: partial class ShoppingCart { public Id Id { get; private set; } public Customer Customer { get; private set; } public ShoppingCart(Id id, Customer customer) { this.Id = id; this.Customer = customer; } } …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.