小编And*_*rew的帖子

从Dart中的工厂构造函数返回null是否可以接受?

我一直在用Dart编写一些代码。我真的很喜欢工厂构造函数,但恐怕我在滥用它的用处。特别是在编写值对象类时,如果验证失败,有时会返回null。

class EmailAddress {
  static final RegExp _regex = new RegExp(...);
  final String _value;

  factory EmailAddress(String input) {
    return _regex.hasMatch(input) ? new EmailAddress._internal(input) : null;
  }

  const EmailAddress._internal(this._value);

  toString() => _value;
}
Run Code Online (Sandbox Code Playgroud)

一开始,这似乎还不错。但是,当您实际使用它时,这就是您所看到的。

methodThatCreatesAnEmailAddress() {
  var emailAddress = new EmailAddress("definitely not an email address");
  ...
}
Run Code Online (Sandbox Code Playgroud)

为什么这样不好的论点是,来自另一种静态类型的语言(例如Java或C ++)的开发人员会期望emailAddress始终被初始化为非null值。为什么这是完全可以接受的参数是构造函数是工厂,因此可以返回null值。

那么,这是不好的做法还是利用了有用的功能?

null constructor factory dart

5
推荐指数
2
解决办法
1305
查看次数

正确的数据类型用于操作原始内存

我有一个便于编码/解码原始内存的类.我最终存储一个void指向内存的指针和被引用的字节数.我担心混叠问题以及位移操作以使编码正确.实质上,WHAT_TYPE我应该使用char,unsigned char,int8_t,uint8_t,int_fast8_t,uint_fast8_t,int_least8_t,或uint_least8_t?规范中是否有确定的答案?

class sample_buffer {
    size_t index; // For illustrative purposes
    void *memory;
    size_t num_bytes;
public:
    sample_buffer(size_t n) :
        index(0),
        memory(malloc(n)),
        num_bytes(memory == nullptr ? 0 : n) {
    }
    ~sample_buffer() {
        if (memory != nullptr) free(memory);
    }
    void put(uint32_t const value) {
        WHAT_TYPE *bytes = static_cast<WHAT_TYPE *>(memory);
        bytes[index] = value >> 24;
        bytes[index + 1] = (value >> 16) …
Run Code Online (Sandbox Code Playgroud)

c++ c++11 c++14 c++17

3
推荐指数
1
解决办法
324
查看次数

标签 统计

c++ ×1

c++11 ×1

c++14 ×1

c++17 ×1

constructor ×1

dart ×1

factory ×1

null ×1