Có phải sự thật là một thuật ngữ lập trình hợp pháp?


11

SO có khá nhiều câu hỏi sử dụng từ "tính trung thực" để chỉ giá trị thật của một biểu thức, khi được đánh giá là boolean, bất kể loại gốc của nó. Nó rất hữu ích trong các ngôn ngữ động.

Vì vậy, câu hỏi của tôi là, đây có phải là một thuật ngữ thực sự không, và nếu vậy chúng ta đã sử dụng nó trước khi Stephen Colbert làm cho nó trở nên phổ biến? Hay chúng ta chỉ chấp nhận nó sau đó? Trong trường hợp đó, thuật ngữ chính xác với định nghĩa tôi đã đưa ra ở trên là gì?


2
vi.wikipedia.org/wiki/Truthiness Làm cho nó những gì bạn muốn. ; ->
Jeff Grigg

1
Tôi nghĩ nó thường có nghĩa hơi kỳ lạ (chắc chắn là bởi Stephen Colbert) vì có nhiều sự độc đoán và nhiều cơ hội để mọi thứ sai so với các giá trị thực / sai. Nhưng nó đủ phổ biến đến mức thật hữu ích khi có một từ cho nó và "tính trung thực" đưa ra ý tưởng khá chính xác. Vì vậy, tôi sẽ coi nó là hợp pháp, nhưng tính hợp pháp được xác định bởi việc sử dụng phổ biến theo thời gian, vì vậy tại thời điểm này không có câu trả lời dứt khoát hoặc có thẩm quyền cho câu hỏi của bạn.
psr

Câu trả lời:


4

Có rất nhiều tranh luận về sự thật .

Merriam-Webster định nghĩa nó là:

  1. truthiness (danh từ)
    1: "chân lý đến từ ruột, không sách vở" (Stephen Colbert, Comedy Central của "The Colbert Report", tháng 10 năm 2005)
    2: "chất lượng thích khái niệm hay sự kiện một lời chúc đến mức khó tin, chứ không phải là khái niệm hoặc sự kiện được biết là đúng "(Hiệp hội phương ngữ Hoa Kỳ, tháng 1 năm 2006)

Từ điển Oxford trực tuyến định nghĩa nó là:

danh từ
[ danh từ chung ] không chính thức
chất lượng của dường như hoặc được cảm nhận là đúng, ngay cả khi không nhất thiết phải đúng.

Nguồn gốc :
đầu thế kỷ 19 (theo nghĩa 'tính trung thực'): được đặt theo nghĩa hiện đại của nhà hài hước Hoa Kỳ Stephen Colbert

Nó đã được sử dụng một chút trên Usenet trước Stephen Colbert, nhưng thường được giải thích ngay khi sử dụng, chẳng hạn như "chất lượng của các khái niệm hoặc sự kiện mà người ta mong muốn hoặc tin là đúng, thay vì các khái niệm hoặc sự kiện được biết là đúng".

Quay lại với lập trình. Bất kể nguồn gốc là gì, ý nghĩa hiện đại về "sự thật từ ruột, ngay cả khi không đúng" rõ ràng là không chính xác hầu hết thời gian khi thảo luận về logic và bảng chân lý của Boolean: iftuyên bố này hoàn toàn đúng và whiletuyên bố đó là sai cho đến khi (i > k). Cảm giác ruột của tôi không đi vào nó.

Nếu bạn đang sử dụng truthiness trong lập trình, rất có thể bạn đang sử dụng từ thế kỷ 19 hiếm nghĩa của tính trung thực , và nó sẽ được cả hai rõ ràng hơn (và có lẽ chính xác hơn) để sử dụng tính trung thực hay chỉ đơn giản là sự thật .

Ngà :

Ngram

Tất nhiên, tiếng Anh thay đổi khi thay đổi việc sử dụng, và một số người đã bắt đầu sử dụng truthiness để bình thật trong chương trình. Tuy nhiên, tôi sẽ khuyên chống lại sự thật để tránh bất kỳ sự mơ hồ nào về ý nghĩa ("sự thật tuyệt đối thực sự" so với "cảm giác chân thực của tôi về sự thật, bất kể sự thật").


2
Cá nhân tôi luôn sử dụng từ trung thực, khi tôi đọc sự thật, tôi thậm chí không coi đó là một từ thực sự.
Ramhound

@Ramhound: Không có gì gọi là "không phải là một từ thực sự". Nếu một từ có thể được sử dụng để giao tiếp giữa con người, thì đó là một từ thực sự.
JacquesB

@Hugo: Merriam-Webster không có thẩm quyền khi nói về thuật ngữ kỹ thuật. Rất nhiều từ có nghĩa khác nhau trong CS so với ngôn ngữ thông thường.
JacquesB

@JacquesB Câu hỏi đặt ra là liệu đó có phải là "thuật ngữ thực sự" hay không và nó được sử dụng trong điện toán trước hay sau khi Colbert phổ biến nó, vì vậy các định nghĩa từ điển từ điển giúp giải quyết những điều này.
Hugo

@Hugo: Bạn đang nói rằng việc sử dụng thuật ngữ kỹ thuật là "rõ ràng không chính xác" do định nghĩa của nó trong một từ điển chung (không dành riêng cho CNTT). Và đề nghị của bạn là sử dụng từ "sự thật" thay vì bỏ lỡ toàn bộ điểm của thuật ngữ "tính trung thực", được áp dụng cho các giá trị không phải là boolean.
JacquesB

9

Đó là một thuật ngữ được biết đến và chấp nhận trong một số vòng kết nối nhất định (ví dụ: so sánh Boolean của JavaScript). Như vậy, đó là một thuật ngữ "thực sự". Nhờ được sử dụng, nó trở nên hợp pháp.

Tất cả các thuật ngữ như vậy đến từ một nơi nào đó - chúng không xuất hiện trong thế giới được hình thành đầy đủ và với ý nghĩa đã được thiết lập (ví dụ: lỗi phần mềm không có nghĩa như bây giờ khi máy tính điện tử mới bắt đầu tồn tại).

Cho dù nó được chấp nhận về mặt học thuật - đó là một vấn đề khác. Theo như tôi biết thì không có thuật ngữ chính thức nào cho ý nghĩa mờ nhạt này của các giá trị boolean ..


@Downvoter - quan tâm để bình luận?
Oded

3
Trên thực tế, thuật ngữ "lỗi" là một vấn đề đã được sử dụng trước các máy tính hiện đại. Edison được sử dụng trong một bức thư năm 1787. Đó là thuật ngữ phổ biến cho các vấn đề kỹ thuật hồi đó. Câu chuyện Grace Hopper có một chút trớ trêu rằng lỗi mà họ tìm thấy thực sự là một lỗi.
Jim C

@JimC - Đủ công bằng, nhưng vẫn vậy, khi mọi người nói "lỗi" ngày nay, họ không có ý nghĩa giống như họ đã làm trong thời của Edison.
Oded

4
Edison đã viết vào năm 1878: It has been just so in all of my inventions. The first step is an intuition, and comes with a burst, then difficulties arise—this thing gives out and [it is] then that 'Bugs' — as such little faults and difficulties are called—show themselves and months of intense watching, study and labor are requisite before commercial success or failure is certainly reached.Âm thanh rất giống với lỗi phần mềm hiện đại đối với tôi.
Hugo

8

Tôi coi sự thật là một thuật ngữ hợp pháp được sử dụng trong đánh giá JavaScript. Cuốn sách về JavaScript của Douglas Crockford - 'JavaScript các bộ phận tốt' định nghĩa các thuật ngữ mà JavaScript 'nếu' đánh giá là đúng là 'sự thật'. Tương tự, anh ta định nghĩa các thuật ngữ mà JavaScript đánh giá là sai là 'giả mạo'. Ông cũng sử dụng thuật ngữ này để làm nổi bật cách đánh giá '==' hoạt động trong JavaScript (khác với cách mà nhiều người dùng JavaScript dường như tin rằng nó hoạt động).

Từ các yếu tố của phong cách JavaScript của Crockford

Toán tử == không nên được sử dụng để so sánh các giá trị với true vì nó thực hiện kiểu ép buộc. Nếu mục đích của chúng tôi là xác định xem dwsv.checked có phải là giá trị boolean đúng hay không, thì chúng ta phải sử dụng toán tử ===. Nếu chúng ta chỉ quan tâm rằng một giá trị là trung thực (và không giả dối) thì tốt hơn hết là không sử dụng toán tử đẳng thức nào cả.

Ví dụ: do kiểu ép buộc., 1 == true là đúng, nhưng 1 === true là sai. Toán tử == có thể ẩn lỗi loại.

Trong bối cảnh này, thuật ngữ này là hợp pháp và hữu ích.

Như một minh họa thêm về đúng và sai trong bối cảnh này, những trường hợp này là minh họa.

'' == '0' // false    
0 == '' // true
0 == '0' // true

false == 'false' // false
false == '0' // true

false == undefined // false
false == null // false
null == undefined // true

' \t\r\n ' == 0 // true

+1 và Python cũng làm điều tương tự. []được đánh giá là sai khi được sử dụng làm boolean, v.v.
Izkata

1
+1 Đây sẽ là câu trả lời. Tôi thường thấy mình nói về "tính trung thực" của các cấu trúc dữ liệu khác nhau. Hoặc thường xuyên hơn, tôi thấy mình nói "X là falsy" trong đó X là ý tưởng giống như 0, None, [], và vân vân.

2

Sự thật đã là một từ rất lâu trước khi Stephen Colbert sử dụng nó. Tôi có thể thề rằng tôi đã nhìn thấy nó trong các bài báo logic / AI, và trong một số bài báo vật lý, nhưng dường như không thể tìm thấy một tài liệu tham khảo nào trước chương trình của Stephen Colbert.


Vấn đề là, bây giờ định nghĩa "Colbert" đã trở nên phổ biến, sẽ khó tìm thấy các tài liệu tham khảo khó hiểu hơn trong các tác phẩm cũ :-)
Dean Harding

Tôi không thể tìm thấy bất kỳ thứ gì từ ACM hoặc IEEE trước năm 2006.
Hugo

@DeanHending Có nhiều cách tìm kiếm từ trước một ngày nhất định, ví dụ như sử dụng Google Sách và trong Usenet .
Hugo

2

Sự thật là một thuật ngữ hợp pháp và được xác định rõ ràng trong Clojure, trong đó nó đề cập đến tài sản của một giá trị được coi là đúng trong một tuyên bố có điều kiện.

Vì vậy, hàm điều kiện dưới đây sẽ chỉ được gọi nếu valuelà "trung thực"

  (if value
    (some-conditional-function))

Các giá trị không trung thực duy nhất là falsenil, mọi thứ khác được coi là sự thật.

Tôi tin rằng sự biện minh triết học cho điều này là nilcó thể được hiểu là "không tồn tại", vì vậy tuyên bố có điều kiện có thể kiểm tra sự tồn tại của một giá trị.

Nhiều ngôn ngữ khác cũng có một khái niệm tương tự về các giá trị sẽ được coi là đúng trong bối cảnh có điều kiện, vì vậy, để kết luận tôi sẽ cho rằng có, tính trung thực nên được coi là một thuật ngữ lập trình hợp pháp khi nó được sử dụng theo cách này.


1

"Sự thật" là điều tôi chắc chắn rằng tôi hiểu khi tôi chọn một ngôn ngữ mới, vì tất cả đều đối phó với nó khác nhau. Trong ngôn ngữ đầu tiên tại nhà của tôi về Perl, chuỗi "0" là sai. Trong nhiều ngôn ngữ, đó là một chuỗi có nội dung và do đó là đúng. Trong một số ngôn ngữ, chuỗi rỗng "" là sai và trong một số ngôn ngữ, nó đúng.

Hiểu những lựa chọn mà các nhà thiết kế ngôn ngữ đưa ra về tính trung thực cho bạn biết rất nhiều về suy nghĩ của họ và bắt đầu nhúng bạn vào vũ trụ khái niệm của ngôn ngữ.

Cho dù chúng tôi đánh vần là "sự thật" hoặc sử dụng một số thuật ngữ khác (tôi nghĩ tiêu đề cho chương đó trong Sách lạc đà là "Sự thật là gì?"), Các lập trình viên đã nắm được các giá trị khác nhau của điều tuyệt đối được gọi là "đúng và sai" rất lâu trước khi Colbert xuất hiện và chỉ ra sự bẻ cong của "sự thật" trong bài diễn văn công khai.


0

Hãy để tôi hỏi lại bạn: "thuật ngữ thực sự" là gì?

Bất kỳ từ nào con người sử dụng là "thực" khi được sử dụng bởi nhiều người có nghĩa là cùng một (ít nhiều). Tất cả các ngôn ngữ không ngừng phát triển, và ngôn ngữ của lập trình viên cũng vậy.

Ví dụ, trong Ruby, khung thử nghiệm rspec ngày nay thích xyz.should be_truthythay vì xyz.should be_true. Hoặc xyz.should be_falseythay vì xyz.should be_false. Tất nhiên, thay vì sau này họ có thể đã chọn xyz.should be_wrong. Nhưng họ đã không làm vậy, vì vậy chúng tôi cũng có thể hỏi liệu "falseyness" có phải là một thuật ngữ không.

Bây giờ thì đúng là vậy. Loại bỏ. Ít nhất là trong các cộng đồng sử dụng các thuật ngữ này. Đừng hỏi luật sư hoặc bác sĩ của bạn. :)

Nếu bạn muốn hỏi "công chúng nói chung bằng trực giác có biết Chân lý là gì không", thì câu trả lời có lẽ là "không".


1
Như (gần như) mọi người đều biết, một cái gì đó là có thật nếu và chỉ khi phần tưởng tượng của nó là falsey .
Ben Voigt

-3

Tôi đã viết một hệ thống xác định cơ hội (toán học) của một tuyên bố boolean là đúng, được cung cấp một phần dữ liệu. Tức là chúng ta có thể xác định rằng có 73% cơ hội Xlà đúng, nếu chúng ta chưa có đủ dữ liệu để xác định chắc chắn rằng X là đúng. "Sự thật" sẽ là một cách hoàn toàn hợp lệ để mô tả tỷ lệ phần trăm niềm tin vào X.

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.