Có một tên cho vấn đề không được đưa ra / null / trống không? [đóng cửa]


8

Tôi làm việc với mã, nơi dữ liệu được lưu trữ / trao đổi trong các cấu trúc giống như Hashtable / Dictionary / Associative-Array, như thế này

{
   'alpha': None,
   'bravo': '',
   # 'charlie' is not given
}

không có nhiều tiêu chuẩn, trường nào là 'được cho' và khi được đưa ra, nếu nó có thể được đưa ra là Không / Null / Nil hoặc một chuỗi trống. Kết quả là, mã được đặt rải rác với các kiểm tra like if hasattr(obj, 'alpha')và dự phòng mặc định.

Có một tên hoặc thuật ngữ tiếng lóng cho loại chống (imho) này không?

CẬP NHẬT:

Dường như, hiện tại không có tên, vì vậy tôi muốn nghe đề xuất. Hiện tại chúng tôi có những điều này:

  • Incorporeal Horde (tín dụng cho psr)

5
Tôi sẽ không gọi nó là một mô hình chống. Trong thế giới thực, có những tình huống khi thiếu một cái gì đó, và có những tình huống khi không. Nếu một giá trị mặc định có ý nghĩa, được, nhưng nếu nó thực sự là null / không tồn tại thì sao? Một số người không có tên đệm chẳng hạn. Làm thế nào bạn đại diện cho điều đó? Đó là lý do tại sao tôi tin rằng đó là tìm kiếm một mô hình lập trình tốt hơn cho loại kịch bản này. Giống như mẫu đối tượng null, có thể là đơn nguyên hoặc bất cứ thứ gì khác tồn tại ngoài đó.
Ionuț G. Stan

Lưu ý rằng một chuỗi rỗng là một thành viên hoàn toàn hợp lệ trong tập hợp tất cả các chuỗi và hoàn toàn khác với việc không có một chuỗi. Nó giống như sự khác biệt giữa 2 câu: "Tôi có 0 đô la." và "Tôi sẽ không cho bạn biết tôi có bao nhiêu đô la."
Ingo

Python có một từ điển mặc định cho phép bạn tránh các kiểm tra này. Haskell có các đơn nguyên giải quyết mọi vấn đề của nhân loại.
Công việc

@Iovy: vâng, có những tình huống, trong đó 'thiếu một cái gì đó' là ổn, nhưng trong trường hợp của tôi, tôi nghĩ, đó là trường hợp mà một người thích làm cho 100 người nhận chịu được mọi sự nhảm nhí có thể hơn là làm cho 1 hoặc 2 người gửi tuân theo một định dạng. Tên đệm (hoặc nói chung là mọi phần của một địa chỉ) là một trường hợp cổ điển trong đó '' là hoàn toàn tốt.
keppla

@Ingo: có, nhưng vấn đề là, trong cơ sở mã của tôi, những 'ý nghĩa' này bị bỏ qua. Tất cả các phần khác nhau của ứng dụng đều có thể trả lời cho cùng một Đơn hàng: {'vị trí': Không}, {'vị trí': []} hoặc chỉ {}.
keppla

Câu trả lời:


6

Tôi không nghĩ có một cái tên như vậy (tôi đã nhìn, nhưng tất nhiên làm thế nào bạn có thể tìm thấy thiếu một cái tên)?

Tôi đề nghị tên "Incorporeal Horde", mặc dù tôi sẽ áp dụng nó cho bộ sưu tập đầy đủ các đối tượng null hoặc thoái hóa - bộ sưu tập kích thước không, null, không xác định, không có gì, Không, NAN (có thể nói là một loại trường hợp cạnh khác), DBNull, void, chuỗi rỗng (có thể là trường hợp đặc biệt của bộ sưu tập trống), các mục từ điển bị thiếu, v.v.

Và tôi sẽ không gọi nó là một mô hình chống, nhưng là một vấn đề trong phát triển phần mềm, đặc biệt là trong trường hợp môi trường lập trình của bạn yêu cầu bạn viết mã riêng cho nhiều trường hợp đó.

Xin lỗi cho một câu trả lời khá không thông tin, nhưng tôi nghĩ đó là điều tốt nhất có thể được thực hiện. Thêm vào đó, nếu thế giới chấp nhận một cái tên do câu hỏi của bạn, nó có thể trở thành một câu trả lời đúng.


Tôi yêu "Horde Incorporeal".
Sean McMillan

Âm thanh như 'Magic the Gathering'. Tôi thích nó. +1.
keppla

0

Trong F #, điều này được cung cấp thông qua Loại tùy chọn (tương tự với các ngôn ngữ trước đó trong cùng một gia đình). Tôi đã sử dụng khái niệm tương tự trong một dự án C # trong đó tôi có một quy tắc rằng tôi cố gắng không bao giờ trả về null từ một hàm, nhưng tôi trả về Option<T>kiểu đó có khả năng có giá trị Không. Bằng cách đó, mã gọi biết rằng nó phải đối phó với khả năng đó trong giá trị trả về.

Tôi muốn có các loại tham chiếu không nullable, giống như chúng ta bây giờ có các loại giá trị nullable, nhưng đó là một câu chuyện khác.


0

Trong JavaScript, điều này được gọi là undefined, đó là một giá trị sentinel duy nhất, khác với null.

Bạn nhận được undefinedbằng cách đánh giá biến toàn cục undefinedhoặc thuộc tính của đối tượng, không được xác định hoặc bằng cách đánh giá một câu lệnh, không trả về giá trị, chẳng hạn như gọi hàm, không trả về bất cứ thứ gì hoặc khối hoặc một khai báo biến (mặc dù hai biểu thức không hợp lệ, vì vậy bạn sẽ chỉ gặp điều đó trong REPL JavaScript).

Khi undefinedgiá trị bị ép buộc Objecttrở thành null, nó sẽ trở thành , nhưng không phải vậy null.

Dưới đây là một minh họa nhỏ:

var a = [1, 2, 3];//undefined
a[0];//1
a[4];//undefined

var o = { foo: "123" };//undefined
o.foo;//"123";
o.bar;//undefined

function bar() { return null; };//undefined
bar();//null
function foo() { /*just an empty block*/};//undefined
foo();//undefined

typeof undefined;//"undefined"
typeof null;//"object"
null == undefined;//true - that is because undefined is converted to an object for comparison and thus yields null
null === undefined;//false - because they are not the same

Tôi nghĩ thật hợp lý khi gọi các giá trị không xác định (ngược lại với các giá trị được xác định là null) không xác định, nếu đó là câu hỏi của bạn. Sử dụng một giá trị sentinel duy nhất để truyền đạt sự vắng mặt của một giá trị được xác định là một giải pháp khả thi cho các ngôn ngữ động, mặc dù nó thường được hiểu kém.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.