Czy „prawdomówność” jest uzasadnionym terminem programistycznym?


11

SO ma sporo pytań, używając słowa „prawdomówność”, co oznacza wartość prawdy wyrażenia, gdy jest oceniana jako wartość logiczna, niezależnie od jej pierwotnego typu. Jest to bardzo przydatne w dynamicznych językach.

Więc moje pytanie brzmi: czy to prawdziwy termin, a jeśli tak, to czy użyliśmy go, zanim Stephen Colbert go spopularyzował? Czy po prostu przyjęliśmy to później? W takim przypadku jaki jest poprawny termin z podaną powyżej definicją?


2
en.wikipedia.org/wiki/Truthiness Zrób to, co chcesz. ; ->
Jeff Grigg

1
Myślę, że zwykle oznacza to nieco pejoratywnie (z pewnością Stephen Colbert), ponieważ istnieje więcej arbitralności i większa szansa na coś złego w porównaniu do faktycznie prawdziwych / fałszywych wartości. Ale dość powszechne jest to, że dobrze jest mieć na to słowo, a „prawdomówność” przekazuje ideę dość zwięźle. Uważam więc, że jest to uzasadnione, ale zasadność jest określana na podstawie powszechnego użytkowania w czasie, więc w tym momencie nie ma ostatecznej ani wiarygodnej odpowiedzi na twoje pytanie.
psr

Odpowiedzi:


4

Toczy się wiele dyskusji na temat prawdomówności .

Merriam-Webster definiuje to jako:

  1. trueiness (rzeczownik)
    1: „prawda, która pochodzi z jelit, a nie książek” (Stephen Colbert, „The Colbert Report” Comedy Central, „październik 2005 r.)
    2:„ jakość preferowania pojęć lub faktów, które chcieliby być prawdziwe, a nie koncepcje lub fakty znane jako prawdziwe ”(American Dialect Society, styczeń 2006)

Oxford Dictionaries Online definiuje to jako:

rzeczownik
[ rzeczownik masowy ] nieformalna
jakość pozorowania lub bycia odczuwanym jako prawdziwa, nawet jeśli niekoniecznie prawdziwa.

Pochodzenie :
początek XIX wieku (w sensie „prawdomówności”): wymyślony we współczesnym znaczeniu przez amerykańskiego humorystę Stephena Colberta

Użyto go trochę w Usenecie przed Stephenem Colbertem, ale zwykle wyjaśnia się go zaraz po jego użyciu, na przykład „jakości stwierdzania pojęć lub faktów, które pragniemy lub uważa się za prawdziwe, a nie pojęć lub faktów uznanych za prawdziwe”.

Powrót do programowania. Bez względu na pochodzenie to współczesne poczucie „prawdy z jelit, nawet jeśli nie jest prawdziwe” jest wyraźnie niepoprawne przez większość czasu podczas omawiania logiki logicznej i tabel prawdy: to ifstwierdzenie jest z pewnością prawdziwe, a to whilestwierdzenie jest fałszywe do czasu (i > k). Moje przeczucie nie wchodzi w to.

Jeśli używasz prawdy w programowaniu, najprawdopodobniej używasz rzadkiego dziewiętnastowiecznego znaczenia prawdomówności , i byłoby bardziej jasne (i prawdopodobnie bardziej poprawne) użycie prawdy lub po prostu prawdy .

Ngram :

Ngram

Oczywiście, angielski zmienia się jak zmiany użytkowania, a niektórzy ludzie zaczęli używać truthiness oznaczać prawdy w programowaniu. Chciałbym jednak odradzam truthiness aby uniknąć wszelkich niejasności znaczeń ( „prawdziwy absolutną prawdę” vs. „moje przeczucie prawdy, niezależnie od faktów”).


2
Osobiście zawsze używałem słowa prawdomówność, kiedy czytam prawdę, nawet nie uważam tego za prawdziwe słowo.
Ramhound,

@Ramhound: Nie ma czegoś takiego jak „nie prawdziwe słowo”. Jeśli słowo może być użyte do komunikacji między ludźmi, jest to prawdziwe słowo.
JacquesB,

@ Hugo: Merriam-Webster nie jest autorytatywny, jeśli chodzi o żargon techniczny. Wiele słów ma inne znaczenie w CS niż we wspólnym języku.
JacquesB,

@JacquesB Pytanie dotyczy tego, czy jest to „prawdziwy termin” i czy był używany w obliczeniach przed jego popularyzacją, czy po nim, więc definicje ze standardowych słowników pomagają sobie z tym poradzić.
Hugo,

@ Hugo: Stwierdzasz, że użycie terminu technicznego jest „wyraźnie niepoprawne” ze względu na jego definicję we wspólnym słowniku (niezwiązanym z IT). A twoja sugestia, aby użyć słowa „prawda”, pomija cały sens terminu „prawdomówność”, który stosuje się do wartości nie-logicznych.
JacquesB,

9

Jest to termin znany i akceptowany w niektórych kręgach (na przykład porównania boolowskie JavaScript). Jako taki jest to termin „prawdziwy”. Dzięki wykorzystaniu staje się uzasadniony.

Wszystkie takie terminy pochodzą skądś - nie pojawiają się w świecie w pełni uformowanym i o ustalonym znaczeniu (na przykład - błędy oprogramowania nie miały znaczenia, jakie miały teraz, gdy komputery elektroniczne dopiero zaczęły istnieć).

Czy jest to akceptowane naukowo - to inna sprawa. O ile mi wiadomo, nie ma formalnego terminu na to rozmyte znaczenie wartości boolowskich.


@Downvoter - chcesz komentować?
Oded

3
W rzeczywistości termin „błąd” jako problem był używany przed nowoczesnymi komputerami. Edison użył w liście 1787. W tamtych czasach były to powszechne określenia problemów technicznych. Historia Grace Hopper jako trochę ironii, że znaleziony przez nich błąd był naprawdę błędem.
Jim C

@JimC - Wystarczająco sprawiedliwe, ale mimo to, kiedy ludzie mówią dzisiaj „robak”, nie mają na myśli tego samego, co w czasach Edisona.
Oded

4
Edison napisał w 1878 r .: 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.Brzmi dla mnie bardzo podobnie do współczesnych błędów oprogramowania.
Hugo

8

Uważam prawdę za uzasadniony termin używany w porównaniu z oceną JavaScript. Książka Douglasa Crockforda o języku JavaScript - „JavaScript the Good Parts” definiuje terminy, które JavaScript „jeśli” uznaje za prawdziwe jako „prawdziwe”. Podobnie definiuje warunki, które JavaScript ocenia jako fałszywe, jako „fałsz”. Używa tego terminu, aby podkreślić sposób, w jaki ocena „==” działa w JavaScript (co różni się od sposobu, w jaki wielu użytkowników JavaScript uważa, że ​​to działa).

Z Crockford's The Elements of JavaScript Style

Nie należy używać operatora == do porównywania wartości z wartością true, ponieważ powoduje on wymuszenie. Jeśli naszym celem jest ustalenie, czy dwsv.checked jest wartością logiczną true, musimy użyć operatora ===. Jeśli zależy nam tylko na tym, aby wartość była prawdziwa (a nie fałszem), lepiej w ogóle nie używać operatora równości.

Na przykład z powodu przymusu typu. 1 == true jest prawdą, ale 1 === true jest fałszem. Operator == może ukryć błędy typu.

W tym kontekście termin jest zarówno uzasadniony, jak i użyteczny.

Jako dalszą ilustrację prawdy i fałszu w tym kontekście przypadki te mają charakter ilustracyjny.

'' == '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, a Python robi to samo. []jest oceniane na fałsz, gdy jest używane jako wartość logiczna itp.
Izkata

1
+1 To powinna być odpowiedź. Często zdarza mi się, że mówię o „prawdziwości” różnych struktur danych. Lub częściej łapię się mówiąc: „X jest falsy”, gdzie X to pomysły jak 0, None, []i tak dalej.

2

Prawda była słowem na długo przed użyciem go przez Stephena Colberta. Mógłbym przysiąc, że widziałem to w artykułach z logiki / sztucznej inteligencji, a także w niektórych artykułach z fizyki, ale nie mogę znaleźć odniesienia do takiego, który poprzedza przedstawienie Stephena Colberta.


Problem polega na tym, że teraz, gdy definicja „Colbert” stała się popularna, o wiele trudniej będzie znaleźć niejasne odniesienia w starszych pracach :-)
Dean Harding

Nie mogłem znaleźć żadnego z ACM lub IEEE przed 2006 r.
Hugo

@DeanHarding Istnieją sposoby wyszukiwania słów przed określoną datą, na przykład za pomocą Google Books i Usenetu .
Hugo,

2

Prawda jest słusznym i dobrze zdefiniowanym terminem w Clojure, gdzie odnosi się do właściwości wartości uważanej za prawdziwą w stwierdzeniu warunkowym.

Tak więc funkcja warunkowa poniżej zostanie wywołana tylko wtedy, gdy valuejest „prawdziwa”

  (if value
    (some-conditional-function))

Jedynymi nieprawdziwymi wartościami są falsei nilwszystko inne jest uważane za prawdziwe.

Uważam, że filozoficzne uzasadnienie tego jest takie, że nilmożna powiedzieć, że „nie istnieje”, więc stwierdzenie warunkowe jest w stanie sprawdzić istnienie wartości.

Wiele innych języków ma również podobną koncepcję wartości, które będą uważane za prawdziwe w kontekście warunkowym, więc podsumowując, twierdzę, że tak, prawdziwość powinna być uważana za uzasadniony termin programowania, gdy jest używana w ten sposób.


1

„Prawdę” to coś, co rozumiem, gdy rozumiem, kiedy wybieram nowy język, ponieważ wszyscy traktują to inaczej. W moim pierwszym ojczystym języku Perl ciąg „0” jest fałszywy. W wielu językach jest to ciąg znaków, który ma treść i dlatego jest prawdziwy. W niektórych językach pusty ciąg „” jest fałszywy, a w niektórych jest prawdziwy.

Zrozumienie wyborów dokonanych przez projektantów języka w zakresie prawdomówności wiele mówi o ich myśleniu i zaczyna zanurzać się w konceptualny wszechświat języka.

Niezależnie od tego, czy przeliterowaliśmy to jako „prawdę”, czy też użyliśmy innego terminu (myślę, że nagłówek tego rozdziału w Księdze wielbłądów brzmi „Czym jest prawda?”), Programiści trzymali się różnych wartości absolutnej rzeczy zwanej „prawdą i fałszem” na długo przed tym, jak pojawił się Colbert i wskazał na zginanie „prawdy” w dyskursie publicznym.


0

Pozwól, że cię zapytam: co to jest „prawdziwy termin”?

Każde słowo używane przez ludzi jest „prawdziwe”, gdy używane jest przez wiele osób, co oznacza (mniej więcej) to samo. Wszystkie języki stale się zmieniają, podobnie jak język programisty.

Na przykład w języku Ruby obecnie preferowana jest platforma testowania rspec xyz.should be_truthyzamiast xyz.should be_true. Lub xyz.should be_falseyzamiast xyz.should be_false. Oczywiście zamiast tego drugiego mogli wybrać xyz.should be_wrong. Ale nie zrobili tego, więc możemy również zapytać, czy „fałsz” jest terminem.

Teraz jest. Tak jakby. Przynajmniej w społecznościach, które używają tych terminów. Nie pytaj swojego prawnika lub lekarza. :)

Jeśli masz zapytać „czy opinia publiczna intuicyjnie wie, czym jest Prawda”, odpowiedź brzmi prawdopodobnie „nie”.


1
Jak (prawie) wszyscy wiedzą, coś jest prawdziwe wtedy i tylko wtedy, gdy jego wyimaginowaną częścią jest falsey .
Ben Voigt,

-3

Napisałem system, który określałby (matematyczną) szansę na prawdziwość instrukcji boolowskiej, biorąc pod uwagę częściowe dane. Tzn. Moglibyśmy ustalić, że istniała 73% szansa na Xprawdziwość, gdybyśmy nie mieli wystarczających danych, aby jednoznacznie ustalić, że X jest prawdą. „Prawda” byłaby całkowicie poprawnym sposobem opisania takiego procentowego przekonania w X.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.