ประวัติการใช้“ foo” และ“ bar” ในซอร์สโค้ดคืออะไร?


60

ทำไมตัวอย่างโค้ดจำนวนมากโดยเฉพาะบทช่วยสอนใช้ชื่อ "Foo" และ "Bar" บ่อยครั้ง มันเกือบจะเป็นมาตรฐาน

ตัวอย่างเช่น:

void foo(char* bar) {
  printf("%s", bar);
}

2
ดูเหมือนว่าโพสต์ของ fmsf ไม่ปลอดภัยจากการข่มขู่ของ RichB

Yup เขารักที่จะเปลี่ยนสิ่งที่ฉันเขียนฉันเริ่มที่จะคิดว่าเขาหมกมุ่นอยู่กับมัน

4
"ทำไมต้องบาร์ foo" ชื่อเรื่องไม่ได้เป็นสิ่งที่ดีมาก IMHO
Jeff Atwood

1
ฉันได้เพิ่มคำตอบด้วยนิรุกติศาสตร์ที่ถูกต้อง (มันเป็นคำที่นิยมมากที่สุดในครอบครัวของคำศัพท์สแลง WWII US Army) และแหล่งที่มาของฉัน

มันเป็นมส์ - เป็นแนวคิดที่สามารถสื่อสารได้ มันเป็นเหตุผลของตัวเอง
Mike Dunlavey

คำตอบ:


65

Fooและbarมาจากตัวย่อกองทัพสหรัฐฯสงครามโลกครั้งที่สอง FUBAR, "F-ed Up Beyond All Recognition" คำศัพท์เหล่านี้ใช้กันอย่างแพร่หลายทั้งครอบครัวในแอฟริกาเหนือและซิซิลี (1942-43-43) วันแห่งการต่อสู้ที่ยอดเยี่ยมของ Rick Atkinson : สงครามในซิซิลีและอิตาลีในปี 1943-1944แสดงรายการเหล่านี้ ยกตัวอย่างเช่น JANFU คือ "กองทัพเรือร่วมกองทัพเรือเอฟขึ้น" เช่นเหตุการณ์เมื่อวันที่ 11 กรกฎาคม พ.ศ. 2486 เมื่อกองเรือบุกโจมตีกิจการฮัสกี้ ยิงลง 23 กองทัพอากาศ C-47 ลำเลียงพลร่มเพื่อหนุนหัวหาด

อัปเดต: Wikipedia มีรายการคำย่อที่เกี่ยวข้องซึ่งรวมถึง WWII ดั้งเดิมบางรายการที่ระบุโดย Atkinson

โปรแกรมเมอร์ทุกคนจะเข้าใจถึงแรงจูงใจในการใช้ตัวแปรfooและbarเพื่อตั้งชื่อตัวแปร แน่นอนว่าพวกเขาเป็นส่วนหนึ่งของวัฒนธรรม C / UNIX ตั้งแต่เริ่มต้นและเมื่อ @Walter Mitty ชี้ให้เห็น

Update (10/5/2009): นี่คือคำอธิบายของ Atkinson:

"พลเรือน" ที่แพร่หลายของพวกเขาทำให้พวกเขาระวังความกระตือรือร้นในการต่อสู้ “ เราไม่ใช่คนรักโรแมนติกที่เต็มไปด้วยเสื้อคลุมแหลมและดาบ” จอห์นเมสันบราวน์ผู้พันนาวิกโยธินกองหนุนมุ่งหน้าสู่ซิซิลี "สงครามครั้งสุดท้ายใกล้เกินไปแล้ว" ชีวิตทหารทำให้พวกเขามีความรู้สึกอ่อนไหวและหวาดระแวง คำย่อหยาบที่จับความคาดหวังที่ลดลงของทหาร - SNAFU, "สถานการณ์ปกติ, ทั้งหมดระยำ" - ได้ขยายเข้าไปในคำศัพท์ของความเห็นเยาะเย้ย GI: SUSFU (สถานการณ์ไม่เปลี่ยนแปลงยังคงขึ้น); FUMTU (ระยำมากกว่าปกติ); JANFU (การมีเพศสัมพันธ์กับกองทัพเรือร่วม); JAAFU (การร่วมเพศสัมพันธ์ระหว่างแองโกล - อเมริกัน); FUAFUP (ระยำและระยำเหมาะสม); และ FUBAR (ระยำเกินการจดจำ) [Atkinson, p. 36]

Update (23/11/2554): @Hugo มีรายการที่ยอดเยี่ยมของบุคคลที่ไม่ใช่ทหาร


3
เพื่อเพิ่มนิรุกติศาสตร์: "FUBAR อาจได้รับอิทธิพลจากคำภาษาเยอรมัน furchtbar ซึ่งหมายถึงแย่มากมันเด่นชัดด้วย cht ที่อ่อนนุ่มและอาจทำให้เกิดการเปลี่ยนแปลงในช่วงสงครามโลกครั้งที่สอง"
Mark

4
@ Mark, Wikipedia เยอรมัน (de.wikipedia.org/wiki/Fubar) แสดงให้เห็นว่านี่อาจเป็น pseudoetymology นอกจากนี้ยังชี้ให้เห็นถึงสิ่งที่มาก่อนเช่น "SILENCE IS FOO" ในการ์ตูน "The Daffy Doc" ของวอร์เนอร์บราเดอร์ในปี 1938

4
@Jim Ferrans: ในขณะที่ FUBAR อาจมีอิทธิพลต่อการใช้ "bar" กับ "foo" แต่ก็มีหลักฐานที่ชัดเจนว่า "foo" โดยตัวมันเองถือกำเนิดขึ้นมาในสงครามโลกครั้งที่สองโดยอ้างอิงอย่างน้อยย้อนหลังไปถึงทศวรรษที่ 1930 มันอาจจะดีที่จะพูดถึงว่าในร่างกายของคำตอบของคุณ
Daniel Pryden

ใช่ foo มีมาก่อนสงครามโลกครั้งที่สอง ในความเป็นจริงฉันได้พบชิ้นส่วนหนังสือพิมพ์ของ MIT จากปี 1938 ที่บอกเราว่ามันเหมือนกัน: "แน่นอนว่า" foo! "มีตำแหน่งที่แน่นอนและไม่สามารถถูกแทนที่ได้ในภาษาของเราแม้ว่าเราจะกลัวว่า ใช้ที่มันถูกยัดเยียดในปัจจุบันอาจส่งผลให้มันตกอยู่ในการหลงลืมก่อน (และ, อนิจจา, มืด) ดูคำตอบของฉันสำหรับข้อมูลอ้างอิงเพิ่มเติมในปี 1937 ในหนังสือพิมพ์ฉบับเดียวกัน: programmers.stackexchange.com/questions/69788/…
Hugo

59

ฉันคิดว่ามันเป็นการออกเสียงออกเสียงของ fubar

ซึ่งย่อมาจาก:

  • F * cked
  • ขึ้น
  • เกิน
  • ทั้งหมด
  • ซ่อมแซม

18
การซ่อมแซมหรือการจดจำ P

10
"Fouled" มักใช้เมื่อต้องการสุภาพ

30
ซ่อมแซม? nah .. การรับรู้
hasen

6
มันคือ "การรับรู้" ดูคำพูดจากวันแห่งการต่อสู้ของ Rick Atkinson ได้ที่นี่: stackoverflow.com/questions/262271/…

7
เพิ่งทราบว่ามีหลักฐานที่ชัดเจน (ดู RFC 3092, ไฟล์ศัพท์แสงและคำตอบอื่น ๆ ที่นี่) ว่า "foo" ถูกใช้เป็นคำที่ไร้สาระของตัวยึดตำแหน่งในช่วงทศวรรษที่ 1930 ก่อนที่ FUBAR จะเข้าสู่คำสแลงของทหารในยุคสงครามโลกครั้งที่สอง
Daniel Pryden

41

พจนานุกรม Hacker ใหม่มีรายการที่ดีมากเกี่ยวกับเรื่องนี้ - และฉันคิดว่ามันจะเป็นทรัพยากรที่ดีกว่าสำหรับชนิดของสิ่งกว่าวิกิพีเดียนี้:

ตัวแปร metasyntactic /n./

ชื่อที่ใช้ในตัวอย่างและเข้าใจว่าเป็นสิ่งใดก็ตามที่อยู่ภายใต้การสนทนาหรือสมาชิกสุ่มของกลุ่มสิ่งต่าง ๆ ภายใต้การสนทนา คำว่า foo เป็นตัวอย่างที่ยอมรับได้ เพื่อหลีกเลี่ยงความสับสนแฮกเกอร์ไม่เคยใช้คำว่า "foo" หรือคำอื่น ๆ เช่นมันเป็นชื่อถาวรสำหรับทุกสิ่ง ในชื่อไฟล์การประชุมทั่วไปคือชื่อไฟล์ใด ๆ ที่เริ่มต้นด้วยชื่อ metasyntactic-variable เป็นไฟล์เริ่มต้นที่อาจถูกลบได้ตลอดเวลา

รายชื่อตัวแปร metasyntactic ที่ต้องการคือลายเซ็นทางวัฒนธรรม พวกเขาเกิดขึ้นทั้งในซีรีส์ (ใช้สำหรับกลุ่มของตัวแปรหรือวัตถุที่เกี่ยวข้อง) และเป็นซิงเกิล นี่คือลายเซ็นทั่วไปบางประการ:

foo, bar, baz, quux, quuuux, quuuux ... :
การใช้งาน MIT / Stanford ตอนนี้พบได้ทุกที่ ที่ MIT (แต่ไม่ใช่ที่สแตนฟอร์ด) baz ออกจากการใช้งานไประยะหนึ่งในช่วงทศวรรษ 1970 และ 80 การกลายพันธุ์ล่าสุดของลำดับนี้แทรก qux ก่อน quux

bazola, ztesch:
Stanford (จากช่วงกลางยุค 70 เป็นต้นไป)

foo, บาร์, thud, grunt:
ซีรีย์นี้ได้รับความนิยมที่ CMU ตัวแปรที่เกี่ยวข้องกับ CMU อื่น ๆ ได้แก่ gorp

foo, bar, fum:
ซีรี่ส์นี้มีรายงานว่าใช้กันทั่วไปที่ XEROX PARC

fred, barney:
ดูรายการสำหรับ fred สิ่งเหล่านี้มีแนวโน้มที่จะเป็นชาวอังกฤษ

corge, grault, flarp: ได้
รับความนิยมจากมหาวิทยาลัยรัตเกอร์สและในหมู่แฮ็กเกอร์ GOSMACS

zxc, spqr, wombat:
มหาวิทยาลัยเคมบริดจ์ (อังกฤษ)

shme
Berkeley, GeoWorks, Ingres ออกเสียง / shme / ด้วยคำย่อ / e /


มหาวิทยาลัยSnork Brown ในช่วงต้นทศวรรษ 1970

foo, bar, zot
มหาวิทยาลัยเทคโนโลยีแห่งเฮลซิงกิฟินแลนด์

พูดจาโผงผาง wibble
นิวซีแลนด์

toto, titi, tata, tutu
ประเทศฝรั่งเศส

pippo, พลูโต, paperino
อิตาลี Pippo / pee'po / และ Paperino / pa-per-ee'-no / เป็นชื่อภาษาอิตาลีสำหรับ Goofy และ Donald Duck

aap, noot, mies
เนเธอร์แลนด์ นี่เป็นคำแรกที่เด็กใช้เพื่อเรียนรู้การสะกดบนกระดานสะกดคำภาษาดัตช์

จากทั้งหมดนี้มีเพียง 'foo' และ 'bar' เท่านั้นที่เป็นสากล (และ baz เกือบเป็นเช่นนั้น) สารประกอบ foobar และ `foobaz 'ก็เพลิดเพลินไปกับสกุลเงินที่กว้างมาก

ศัพท์แสงบางคำยังใช้เป็นชื่อ metasyntactic ยกตัวอย่างเช่น barf and mumble ดูที่ Commonwealth Hackish เพื่ออภิปรายเกี่ยวกับตัวแปร metasyntactic จำนวนมากที่พบในบริเตนใหญ่และเครือจักรภพ


ต้องบอกว่าฉันมาจากนิวซีแลนด์และฉันไม่เคยได้ยิน 'blarg' หรือ 'wibble'

นั่นเป็นสิ่งหนึ่งที่ค่อนข้างดี ขอบคุณที่เป็นเพื่อนกัน
Tarik

OMG บัญชี QL ของฉันคือ qux ตกใจ ...

@Colin - ฉันแก้ไขลิงก์ไปยังไซต์อื่นเนื่องจากลิงก์ที่มีอยู่เดิมเป็นแบบออฟไลน์
จากที่นั่น

ฉันพบตัวแปร metasyntactic อื่น ๆ ที่น่าสนใจจากกระดาษ MIT 1964 เกี่ยวกับ LISP (แน่นอนว่ายังมี foo): chi / boston new york / boston butter steak / foo crock glitch / poot toop / toot toot toot เสียงแตกป๊อป / หนึ่งสองสาม / เครื่องบินนวดย่อย ดูคำตอบของฉันสำหรับข้อมูลเพิ่มเติม: programmers.stackexchange.com/questions/69788/…
Hugo

25

Wikipedia ให้นิยามของตัวแปร Metasyntactic นี้ :

ในวิทยาการคอมพิวเตอร์โปรแกรมเมอร์ใช้ตัวแปร metasyntactic เพื่ออธิบายชื่อตัวแทนหรือคำนามแฝงที่ใช้กันทั่วไปเพื่อแสดงถึงหัวข้อภายใต้การสนทนาหรือสมาชิกโดยพลการของชั้นเรียนของสิ่งต่าง ๆ ภายใต้การสนทนา การใช้ตัวแปร metasyntactic มีประโยชน์ในการช่วยให้โปรแกรมเมอร์ไม่ต้องสร้างตัวแปรที่มีชื่อตามหลักเหตุผลซึ่งมักจะมีประโยชน์เมื่อสร้างหรือสอนตัวอย่างของอัลกอริทึม คำว่า foo เป็นตัวอย่างหลัก
คำว่า "ตัวแปร metasyntactic" ส่วนใหญ่จะพบในวรรณกรรมไม่เป็นทางการ บางครั้งมันก็ใช้เป็นคำพ้องความหมายสำหรับ metavariable
สัญลักษณ์หรือคำใด ๆ ที่ไม่ละเมิดกฎของภาษาสามารถใช้เป็นตัวแปร metasyntactic แต่คำที่ไร้สาระมักใช้กันทั่วไป แนวคิดเดียวกันนี้ใช้ในสาขาอื่นที่แสดงด้วยคำเช่นตัวแปรแผนผัง (ดูรูปแบบตรรกะ )
โดยการเปรียบเทียบทางคณิตศาสตร์: ตัวแปร metasyntactic เป็นคำที่เป็นตัวแปรสำหรับคำอื่น ๆ เช่นเดียวกับในตัวอักษรพีชคณิตจะใช้เป็นตัวแปรสำหรับตัวเลข

บทความนี้ยังให้ตัวอย่างทั่วไปของตัวแปรดังกล่าวในภาษาการเขียนโปรแกรมที่แตกต่างกัน:

C
ในตัวอย่างต่อไปนี้ของภาษาการเขียนโปรแกรม C ชื่อฟังก์ชั่น foo และแถบชื่อตัวแปรเป็นทั้งตัวแปร metasyntactic บรรทัดที่ขึ้นต้นด้วย // คือความคิดเห็น

// The function named foo
int foo(void)
{
   // Declare the variable bar and set the value to 1
   int bar = 1;

   return bar;
}

หลาม

สแปมแฮมและไข่เป็นตัวแปรหลักที่ใช้ในภาษาโปรแกรมภาษาไพ ธ อน [5] นี่คือการอ้างอิงถึงภาพร่างตลกที่มีชื่อเสียงสแปมโดย Monty Python, คำพ้องของภาษา [6] ในตัวอย่างต่อไปนี้สแปมแฮมและไข่เป็นตัวแปร metasyntactic และบรรทัดที่ขึ้นต้นด้วย # คือความคิดเห็น

# Define a function named spam
def spam():

    # define the variable ham
    ham = "Hello World!"

    #define the variable eggs
    eggs = 1

    return

ทับทิม

ในตัวอย่างต่อไปนี้ baz, foo และ bar เป็นตัวแปร metasyntactic และบรรทัดที่ขึ้นต้นด้วย # คือความคิดเห็น

# Declare the variable foo and set equal to 1
foo = 1

# Declare the variable bar and set equal to 2
bar = 2

# Declare the method (function) named baz, which prints the text 'Hello world'
def baz
   puts 'Hello world'
end

19

นี่คือคำตอบของวิกิพีเดีย:

คำว่า foobar, foo, bar และ baz เป็นชื่อตัวแทนทั่วไป (หรือที่เรียกว่าตัวแปร metasyntactic) ที่ใช้ในการเขียนโปรแกรมคอมพิวเตอร์หรือเอกสารที่เกี่ยวข้องกับคอมพิวเตอร์ โดยทั่วไปจะใช้เพื่อแสดงค่าที่ไม่รู้จักโดยทั่วไปเมื่ออธิบายสถานการณ์ที่เข้าใจถึงวัตถุประสงค์ของค่าที่ไม่รู้จัก แต่ค่าที่แม่นยำของพวกเขานั้นเป็นแบบสุ่มและไม่สำคัญ สามารถใช้คำศัพท์เพื่อแสดงส่วนใดส่วนหนึ่งของระบบหรือแนวคิดที่ซับซ้อนรวมถึงข้อมูลตัวแปรฟังก์ชันและคำสั่ง คำเหล่านี้ไม่มีความหมายในการใช้งานนี้และเป็นเพียงการแสดงเชิงตรรกะเช่นตัวอักษร x และ y ที่ใช้ในพีชคณิต มักใช้ Foobar เพียงอย่างเดียว โดยทั่วไปจะใช้ foo, bar และ baz ตามลำดับนั้นเมื่อต้องการหลายเอนทิตี

ฟูเข้ามาในภาษาอังกฤษในฐานะที่เป็นคนใหม่และเป็นที่ยอมรับว่าเป็น neologism ตัวอย่างของตัวแปร metasyntactic ซึ่งเป็นที่ยอมรับมันถูกนำมาใช้อย่างกว้างขวางในตัวอย่างการเขียนโปรแกรมคอมพิวเตอร์ (บางครั้งก็แสดงว่า เอริคเอส. เรย์มอนด์เรียกมันว่า "การแฮ็กข้อมูลสำคัญ" ข้าง kludge และ cruft [1]

http://en.wikipedia.org/wiki/Foo

และจาก RFC 3092:

เมื่อนำมาใช้ในการเชื่อมต่อกับ 'บาร์' มันมักจะโยงไปถึงยุค WW II กองทัพสแลงสแลงย่อคำย่อ FUBAR ('Fucked Up Beyond All All Repair') ภายหลังถูกดัดแปลงเป็น foobar รุ่นแรกของไฟล์ศัพท์แสง [JARGON] ตีความการเปลี่ยนแปลงนี้ว่าเป็นสงครามหลังสงคราม แต่ตอนนี้ดูเหมือนว่า FUBAR จะกลายเป็นอนุพันธ์ของ 'foo' ซึ่งอาจได้รับอิทธิพลจาก 'furchtbar' ของเยอรมัน (แย่มาก) - 'foobar' จริงแล้วเป็นรูปแบบดั้งเดิม

สำหรับดูเหมือนว่าคำว่า 'foo' นั้นมีประวัติสงครามทันทีในแถบการ์ตูนและการ์ตูน ในปี 1938 การ์ตูน Warner Brothers กำกับโดย Robert Clampett, "The Daffy Doc", รุ่นแรก ๆ ของ Daffy Duck ถือป้ายบอกว่า "SILENCE IS FOO!" ... (snip)

http://www.faqs.org/rfcs/rfc3092.html


6
หรือคุณก็สามารถยอมรับมันมาจาก fubar = ' 'F' ขึ้นจนจำไม่ได้ทั้งหมด
โจนาธาน Fingland

4
@ Jonathan Fingland: ไม่เป็นไร (อันที่จริงแล้ว "foo" อาจมีทั้ง "foobar" และ "FUBAR") ดู RFC 3092 และรายการ Jargon File สำหรับ "foo"
Daniel Pryden

@Daniel การอ้างอิงที่ยอดเยี่ยม เพิ่ม
Jonathan Fingland

19

TL; DR

  • "Foo" และ "bar" เป็นตัวแปร metasyntactic ได้รับความนิยมจาก MIT และ DEC การอ้างอิงครั้งแรกทำงานใน LISP และ PDP-1 และ Project MAC ตั้งแต่ปี 1964 เป็นต้นไป

  • คนเหล่านี้หลายคนอยู่ใน Tech Model Railroad Club ซึ่งเราพบว่ามีการใช้ "foo" เป็นครั้งแรกในแวดวงเทคโนโลยีในปี 1959 (และตัวแปรในปี 1958)

  • ทั้ง "foo" และ "bar" (และแม้แต่ "baz") เป็นที่รู้จักกันดีในวัฒนธรรมสมัยนิยมโดยเฉพาะอย่างยิ่งจาก Smokey Stover และ Pogo comics ซึ่งสมาชิก TMRC จำนวนมากจะถูกอ่าน

  • ดูเหมือนว่า FUBAR ทางทหารจะมีส่วนทำให้ความนิยมของพวกเขา


การใช้คำว่า "foo" เพียงคำเดียวนั้นเป็นคำที่ไร้สาระในวัฒนธรรมสมัยนิยมในต้นศตวรรษที่ 20 เช่นเดียวกับ FUBAR ทางทหาร (การอ่านพื้นหลังบางส่วน: FOLDOC ไฟล์FOLDOC ไฟล์ ศัพท์แสงไฟล์ศัพท์แสง Wikipedia RFC3092 )


ตกลงดังนั้นเรามาค้นหาการอ้างอิงบางอย่าง

กดหยุด! หลังจากโพสต์คำตอบนี้ฉันค้นพบบทความที่สมบูรณ์แบบเกี่ยวกับ "foo" ในวันศุกร์ที่ 14 มกราคม พ.ศ. 2481ฉบับThe Tech ("หนังสือพิมพ์ที่เก่าแก่และใหญ่ที่สุดของ MIT และหนังสือพิมพ์ฉบับแรกที่เผยแพร่ทางเว็บ") เล่ม LVII ฉบับที่ 57, ราคาสามเซ็นต์:

บน Foo-ism

Lounger คิดว่าธุรกิจของ Foo-ism นี้ดำเนินไปไกลเกินกว่าที่จะมีผู้สนับสนุนที่เข้าใจผิด อาจเป็นได้ว่าไม่มี foo เหมือน foo เก่าและเราก็ แต่ foo และเงินของเขาเป็นปาร์ตี้ (เสียงจากอัฒจันทร์ - "อย่าเป็นคนโง่!")

แน่นอนว่า "foo!" มีตำแหน่งที่แน่นอนและไม่สามารถถูกแทนที่ได้ในภาษาของเราแม้ว่าเราจะกลัวว่าการใช้งานมากเกินไปซึ่งมันถูกควบคุมอยู่ในปัจจุบันอาจส่งผลให้เกิดการตกหล่นในช่วงต้น (และอนิจจามืด) เราพูดว่าอนิจจาเพราะการใช้คำอย่างเหมาะสมอาจส่งผลให้เกิดเหตุการณ์ที่มีความสุขดังต่อไปนี้

มันเป็นการบรรยายอุณหพลศาสตร์ 8.50 โดยศาสตราจารย์สเลเตอร์ในห้อง 6-120 ศาสตราจารย์ที่ปกคลุมด้านหน้าของกระดานดำได้ตั้งมือจับที่ใช้กลไกยกขณะเดียวกันก็หันไปที่ชั้นเรียนเพื่ออภิปรายต่อไป กระดานด้านหน้าช้าอย่างสง่าผ่าเผยยกตัวขึ้นเผยให้เห็นกระดานด้านหลังและบนกระดานเขียนสัญลักษณ์ขนาดใหญ่ที่สะกดว่า "FOO" ไว้บนกระดาน

หนังสือพิมพ์ The Techเมื่อปีที่แล้วจดหมายถึงบรรณาธิการ, กันยายน1937 :

ตามเวลาที่รถไฟมาถึงสถานีนีโอไฟท์จะเต็มไปด้วยเรื่องราวแห่งความรุ่งโรจน์ของพี่โอมิคอนไมครอนไมครอนซึ่งมักเรียกกันว่าฟูพวกเขาเป็นเหยื่อที่ง่าย

...

ไม่ใช่ว่าฉันจะสูญเสียลูกชายสี่คนแรกของฉันไปสู่ภราดรภาพที่ยิ่งใหญ่และเป็นสากลของพี่โอไมครอนโอไมครอน แต่ฉันหวังว่าลูกชายของฉันคนที่ห้าซึ่งเป็นลูกของฉันควรได้รับการเตือนล่วงหน้าอย่างน้อย

หวังว่าคุณจะ

แม่แห่งห้าไม่พอใจ

และเทคโนโลยีในเดือนธันวาคม1938 :

แนวโน้มความคิดทั่วไปอาจตีความได้ดีที่สุดจากคำพูดที่เกิดขึ้นในตอนท้ายของบัตรลงคะแนน หนึ่งเสียงกล่าวว่า '"ฉันไม่คิดว่าสิ่งที่ฉันทำคือธุรกิจของ Pulver" ในขณะที่อีกคนหนึ่งเพิ่งเพิ่มคำว่า "Foo"


เอกสารแรก "foo" ในแวดวงเทคโนโลยีน่าจะเป็นพจนานุกรมของ TMRC ในปี 1959 :

FOO: พยางค์ศักดิ์สิทธิ์ (FOO MANI PADME HUM); ที่จะพูดเมื่ออยู่ภายใต้แรงบันดาลใจในการสื่อสารกับเทพ ภาระผูกพันแรกของเราคือการทำให้ Foo Counters หมุนต่อไป

เหล่านี้มีการอธิบายที่FOLDOC คอมไพเลอร์ของพจนานุกรม Pete Samson กล่าวในปี 2005:

การใช้คำนี้ที่ TMRC ทำให้เสียการมาที่นี่ของฉัน ตัวนับ foo สามารถมีแสงกระพริบแบบสุ่มหรืออาจเป็นตัวนับจริงที่มีอินพุตที่ไม่ชัดเจน

และจากJargonของปี 1996 ไฟล์ 4.0.0 :

รุ่นก่อนหน้าของพจนานุกรมนี้ได้รับ 'baz' เป็นความเสียหายของบาร์ Stanford อย่างไรก็ตาม Pete Samson (คอมไพเลอร์ของพจนานุกรม TMRC) รายงานว่าเป็นปัจจุบันแล้วเมื่อเขาเข้าร่วม TMRC ในปี 1958 เขากล่าวว่า "มันมาจาก" Pogo "Albert the Alligator เมื่อเดือดร้อนหรือเดือดดาลจะตะโกน 'Bazz Fazz!' หรือ 'Rowrbazzle!' รูปแบบของสโมสรได้รับการกล่าวถึงในการจำลอง (ตำนาน) มณฑลนิวอิงแลนด์ของ Rowrfolk และ Bassex (Rowrbazzle ผสมกับ (Norfolk / Suffolk / Middlesex / Essex) "

หนึ่งปีก่อนหน้าพจนานุกรม TMRC, MIT Voo Doo Gazette ของ1958 ("อารมณ์ขันเกี่ยวกับสำนักงานของ MIT Deans") (PDF)กล่าวถึง Foocom ใน "The Laws of Murphy and Finagle" โดย John Banzhaf (นักศึกษาวิศวกรรมไฟฟ้า) :

การวิจัยเพิ่มเติมภายใต้ข้อตกลงร่วมทุน Foocom และ Anarcom ได้ขยายกฎหมายให้ครอบคลุมและครอบคลุมทั่วโลก: หากมีสิ่งใดผิดพลาดได้ก็จะเกิดขึ้น!

นอกจากนี้ในปี 1964 MIT Voo Doo (PDF) ก็อ้างถึงการใช้ TMRC:

ใช่ ฉันต้องการที่จะประสบความสำเร็จและลูกค้าหิมะทันที ส่งปริญญามาให้ฉัน: ...

  • ฟูเคาน์เตอร์

  • ฟูจุง


แต่ขอให้จำไว้ว่าคำถามนี้เกี่ยวกับตัวอย่างโค้ดดังนั้นหา "foo", "bar" และ "foobar" ที่เผยแพร่ในโค้ด

ดังนั้นไฟล์ศัพท์แสง 4.4.7พูดถึง "foobar":

อาจเผยแพร่ครั้งแรกผ่านคู่มือ DECsystem โดย Digital Equipment Corporation (DEC) ในปี 1960 และต้นปี 1970; การพบเห็นที่ยืนยันแล้วกลับไปที่ปี 1972

การอ้างอิงที่ตีพิมพ์ครั้งแรกที่ฉันสามารถหาได้คือตั้งแต่เดือนกุมภาพันธ์2507แต่เขียนในเดือนมิถุนายน 2506 ภาษาการเขียนโปรแกรม LISP: การใช้งานและการใช้งานโดย Information International, Inc. กับผู้เขียนหลายคน แต่รวมถึง Timothy P. Hart และ Michael Levin

ดังนั้นเนื่องจาก "FOO" เป็นชื่อของตัวเอง "COMITRIN" จะถือว่าทั้ง "FOO" และ "(FOO)" ด้วยวิธีเดียวกัน

รวมถึงตัวแปร metasyntactic อื่น ๆ เช่น: FOO CROCK GLITCH / POOT TOOR / ON You / SNAP CRACKLE POP / XYZ

ฉันคาดหวังว่านี่จะเหมือนกับการอ้างอิง "foo" ต่อไปนี้จาก Project MAC ของ MIT ในAIM-064 ในเดือนมกราคม1964หรือLISP Exercisesโดย Timothy P. Hart และ Michael Levin:

รถยนต์ [((FOO. CROCK). GLITCH)]

มันแบ่งตัวแปร metasyntactic อื่น ๆ อีกมากมายเช่น: CHI / BOSTON นิวยอร์ก / SPINACH BUTTER STEAK / FOO CROCK GLITCH / POOT TOOP / ตุ๊ดตุ๊ด / ISTHISATRIVIALEXCERCISE / PLOPP CRACKLE POP / หนึ่งสองสาม / แพลตฟอร์สไตรค์

สำหรับทั้ง "foo" และ "bar" ด้วยกันการอ้างอิงที่เร็วที่สุดที่ฉันสามารถหาได้คือจาก MAC Project ของ MIT ในAIM-098 ของมิถุนายน1966หรือPDP-6 LISPโดย Peter Samson:

EXPLODE เช่น PRIN1 แทรกเครื่องหมายทับดังนั้น (EXPLODE (QUOTE FOO / BAR)) PRIN1 เป็น (FOO // / BAR) หรือ PRINC's as (FOO / BAR)


การเรียกคืนบางอย่างเพิ่มเติม

@Walter Mittyจำได้ว่าเว็บไซต์นี้ในปี 2008:

ฉันสองไฟล์ศัพท์แสงเกี่ยวกับ Foo Bar ฉันสามารถย้อนกลับไปอย่างน้อยถึงปี 1963 และ PDP-1 หมายเลขซีเรียล 2 ซึ่งอยู่บนชั้นสองของอาคาร 26 ที่ MIT Foo and Foo Bar ถูกใช้ที่นั่นและหลังปี 1964 ที่ห้อง PDP-6 ที่ MAC Project

John V. Everettจำได้ว่าในปี 1996:

เมื่อฉันเข้าร่วม DEC ในปี 1966 foobar นั้นถูกใช้โดยทั่วไปแล้วเป็นชื่อไฟล์ที่ถูกทิ้ง ฉันเชื่อว่า fubar กลายเป็น foobar เพราะ PDP-6 รองรับชื่อตัวละครหกชื่อแม้ว่าฉันจะสันนิษฐานเสมอว่าคำศัพท์ที่ย้ายไป DEC จาก MIT ในวันนั้นมี MIT หลายประเภทที่บางคนเคยทำงานกับ 7090/7094 CTSS เนื่องจาก 709x เป็นเครื่องจักรขนาด 36 บิต foobar อาจถูกใช้เป็นชื่อไฟล์ทั่วไปที่นั่น

โดยทั่วไปแล้ว Foo และ bar นั้นถูกใช้เป็นนามสกุลไฟล์ เนื่องจากตัวแก้ไขข้อความของวันนั้นดำเนินการกับไฟล์อินพุตและสร้างไฟล์เอาต์พุตมันเป็นเรื่องธรรมดาที่จะแก้ไขจากไฟล์. foo เป็นไฟล์. bar และกลับมาอีกครั้ง

เป็นเรื่องปกติที่จะใช้ foo เพื่อเติมบัฟเฟอร์เมื่อแก้ไขด้วย TECO สตริงข้อความที่เติมดิสก์บล็อกหนึ่งอันคือ IFOO $ HXA127GA $$ โปรแกรมเมอร์ PDP-6/10 เกือบทั้งหมดที่ฉันทำงานด้วยใช้สตริงคำสั่งเดียวกันนี้

Daniel PB Smithในปี 1998:

Dick Gruen มีอุปกรณ์ในห้องพักหอพักของเขาซึ่งเป็นที่รวมตัวกันของ B-battery ตัวต้านทานตัวเก็บประจุและหลอดนีออน NE-2 ซึ่งเขาเรียกว่า "foo counter" นี่น่าจะประมาณ 2507 หรือมากกว่านั้น

Robert Schuldenfreiในปี 1996:

การใช้ FOO และ BAR เป็นตัวอย่างชื่อตัวแปรย้อนกลับไปอย่างน้อยปี 1964 และ IBM 7070 สิ่งนี้อาจเก่ากว่า แต่นั่นคือที่ฉันเห็นครั้งแรก นี่คือในแอสเซมเบลอร์ สิ่งที่จะเป็นจำนวนเต็ม FORTRAN เทียบเท่า? IFOO และ IBAR?

Paul M. Wexelblatในปี 1992:

แอสเซมเบลอร์ PDP-1 ที่เก่าที่สุดใช้อักขระสองตัวสำหรับสัญลักษณ์ (เครื่อง 18 บิต) โปรแกรมเมอร์มักจะทิ้งคำสองสามคำไว้เป็นพื้นที่แพตช์เพื่อแก้ไขปัญหา (ข้ามไปที่พื้นที่ปะแก้ทำโค้ดใหม่กระโดดกลับ) พื้นที่นั้นตามอัตภาพชื่อ FU: ซึ่งย่อมาจาก Fxxx Up สถานที่ที่คุณแก้ไข Fxxx Ups เมื่อพูดแล้วมันถูกเรียกว่า FU space Assemblers ที่ใหม่กว่า (เช่น MIDAS อนุญาตแท็กถ่านสามตัวเพื่อให้ FU กลายเป็น FOO และในขณะที่โปรแกรมเมอร์ PDP-1 ทั้งหมดจะบอกคุณว่าเป็นพื้นที่ FOO

Bruce B. Reynoldsในปี 1996:

ในฝั่ง IBM ของ FOO (FU) BAR คือการใช้ด้าน BAR เป็นการลงทะเบียนที่อยู่ฐาน; ในโปรแกรมเมอร์ของ CICS ช่วงกลางปี ​​1970 ต้องกังวลกับ xxxBARs ที่หลากหลาย ... ฉันคิดว่าหนึ่งในนั้นคือ FRACTBAR ...

นี่คือIBM "BAR" ตรงจากปี 1955


การอ้างอิงก่อนอื่น:


ฉันไม่สามารถค้นหาการอ้างอิงใด ๆ ไปยัง foo bar เป็น "inverted foo signal" ตามที่แนะนำใน RFC3092 และที่อื่น ๆ

นี่คือ F00s ก่อนหน้านี้บางส่วน แต่ฉันคิดว่ามันเป็นเรื่องบังเอิญ / เป็นบวก:


13

การใช้คำเช่น "foo" และ "bar" ทำให้คุณมุ่งความสนใจไปที่แนวคิดไม่ใช่สิ่งที่คุณสามารถเข้าใจได้โดยยึดตามคำศัพท์ที่คุณรู้ ตัวอย่างเช่น:

public abstract class Animal
{
    public abstract void speak();
}

public class Cat 
    extends Animal
{
    public abstract void speak()
    {
        System.out.println("meow");
    }
}

public class Dog
    extends Animal
{
    public abstract void speak()
    {
        System.out.println("bark");
    }
}

โค้ดด้านบนช่วยให้คุณย้อนกลับไปเรียนรู้สิ่งต่าง ๆ ในโลกแห่งความเป็นจริง

หากคุณกำลังพยายามอธิบายแนวคิดที่ส่วนที่สำคัญไม่ใช่สิ่งที่กำลังทำอยู่ (ตัวอย่างการพิมพ์ meow หรือ bark) แต่เกี่ยวกับวิธีการทำแล้วให้ถอดชิ้นส่วนที่คุณคุ้นเคยช่วยออก:

public abstract class Foo
{
    public abstract void star();
}

public class Bar
    extends Foo
{
    public abstract void star()
    {
        System.out.println("A");
    }
}

public class Car
    extends Foo
{
    public abstract void star()
    {
        System.out.println("b");
    }
}

ตอนนี้คุณต้องมุ่งเน้นไปที่สิ่งที่เกิดขึ้นจริงคุณไม่สามารถเดาได้ว่าอะไรจะเกิดขึ้น

ดังนั้นเวอร์ชั่นสั้นคือ foo, bar, and like ใช้เพื่อเน้นแนวคิดที่เนื้อหาไม่สำคัญ แต่เป็นแนวคิด


คำตอบที่แท้จริง!
nickf

1
ใช่ แต่ทำไม Foo and Bar ถึงเป็นพิเศษ? ทำไมไม่ Lorum และ Ipsum

en.wikipedia.org/wiki/Fooอาจจะถูกต้อง ...

@TofuBeer อ๋อพวกเขาเป็น "ตัวแปร metasyntactic" @masher เห็นคำตอบของฉันพร้อมการอ้างอิงมากมายว่าทำไม Foo and Bar ไม่ใช่ Lorem และ Ipsum programmers.stackexchange.com/questions/69788/…อันที่จริงมีโหลดของตัวแปร metasyntactic ที่แตกต่างกันมากมายซึ่งถูกใช้งานมาหลายปีและในหลาย ๆ ที่
Hugo

7

จากhttp://en.wikipedia.org/wiki/Foobar

ในด้านเทคโนโลยีคำนี้อาจถูกเผยแพร่ผ่านคู่มือระบบโดย Digital Equipment Corporation ในปี 1960 และต้นปี 1970 ความเป็นไปได้อีกประการหนึ่งคือ foobar วิวัฒนาการมาจากอุปกรณ์อิเล็กทรอนิกส์ นี่เป็นเพราะหากสัญญาณดิจิตอลมีการใช้งานต่ำ (ดังนั้นเงื่อนไขเชิงลบหรือแรงดันศูนย์เป็นตัวแทนของ "1") จากนั้นแถบแนวนอนมักจะอยู่เหนือป้ายสัญญาณ ไฟล์ Jargon สร้างกรณีที่ foo นำหน้า FUBAR


สิ่งนี้ไม่ได้อธิบายว่าทำไม

ฉันได้พบการอ้างอิงมากมายของ "foo" ครั้งแรกและต่อมา "bar" จาก MIT และ DEC (ทั้งใน Massachusetts) ในการทำงานกับ LISP และ PDP-1 และ Project MAC ตั้งแต่ปี 1964 เป็นต้นไป มันเป็นความคิดที่ดี แต่ฉันไม่สามารถหาการอ้างอิงถึง "inverted foo signal" ได้ เพิ่มเติมได้ที่นี่: programmers.stackexchange.com/questions/69788/…
Hugo

7

จากไฟล์ Jargon http://www.catb.org/jargon/html/F/foo.html

foo: / foo /

  1. interj ระยะเวลาที่น่ารังเกียจ
  2. [ธรรมดามาก] ใช้โดยทั่วไปเป็นชื่อตัวอย่างสำหรับทุกอย่างโดยเฉพาะ โปรแกรมและไฟล์ (โดยเฉพาะไฟล์รอยขีดข่วน)
  3. เป็นครั้งแรกในรายการมาตรฐานของตัวแปร metasyntactic ที่ใช้ในตัวอย่างไวยากรณ์ ดูเพิ่มเติมที่ bar, baz, qux, quux, garply, waldo, เฟร็ด, plugh, xyzzy, thud

บาร์: / bar /, n.

  1. [พบบ่อยมาก] ตัวแปร metasyntactic ตัวที่สองรองจาก foo และก่อน baz “ สมมติว่าเรามีสองฟังก์ชั่น: FOO และ BAR FOO เรียก BAR .... ”
  2. มักจะผนวกเข้ากับ foo เพื่อผลิต foobar

5

อ้างอิงจากhttp://en.wikipedia.org/wiki/Foo :

ต้นกำเนิดของข้อกำหนดนั้นไม่เป็นที่ทราบแน่ชัดและมีหลายทฤษฎีที่มีความสำคัญในการระบุ Foobar อาจมาจากคำย่อ FUBAR ทางทหารที่หยาบคายหรืออาจได้รับความนิยมเนื่องจากข้อเท็จจริงที่ว่ามันเด่นชัดเหมือนกัน


4

ฉันสองไฟล์ศัพท์แสงเกี่ยวกับ Foo Bar

ฉันสามารถย้อนกลับไปอย่างน้อยถึงปี 1963 และ PDP-1 หมายเลขซีเรียล 2 ซึ่งอยู่บนชั้นสองของอาคาร 26 ที่ MIT Foo and Foo Bar ถูกใช้ที่นั่นและหลังปี 1964 ที่ห้อง PDP-6 ที่ MAC Project


+1 เพื่อเป็นสักขีพยานในการใช้งานครั้งแรกของ Foo Bar :) Foo และ Foo Bar ใช้งานจริงได้อย่างไร
Hugo

ป.ล. ฉันได้รวมคำพูดของคุณไว้ในคำตอบใหญ่แล้ว: programmers.stackexchange.com/questions/69788/…
Hugo

2

เท่าที่ผมรู้มาจาก foo foobar ซึ่งเป็นการเปลี่ยนแปลงของ "fubar" จับ phraase ทหารที่ยืนสำหรับ " F ***เอ็ดยูพี eyond LL R ecognition."

จากนั้นอีกครั้งอาจมีแหล่งอื่น

http://en.wikipedia.org/wiki/Foo


0

Foo and Bar (หรือที่รู้จักกันในชื่อ FUBAR ... F *** ed Up Beyond All Recognition) เพิ่งถูกใช้เป็นชื่อสามัญมาตรฐานสำหรับสิ่งต่าง ๆ เช่นคลาสคุณสมบัติคุณสมบัติชื่อเมธอด ฯลฯ

โดยพื้นฐานแล้วความคิดคือการถ่ายทอดรหัสของคุณโดยไม่มีข้อมูลที่ไม่เกี่ยวข้องซึ่งอาจจะอยู่ห่างจากวิธีการทำงานของรหัส (เช่นเราไม่จำเป็นต้องรู้ว่าฟังก์ชั่นของคุณชื่อ AddUser เพื่อดูรหัสและเข้าใจว่ามันทำอะไรถ้าเราเปลี่ยนชื่อ ถึง Foo ())


-3

เหล่านี้เป็นคำที่ไร้สาระที่ในกรณีส่วนใหญ่สามารถทดแทนด้วยคำตัวอย่างที่เกี่ยวข้องมากขึ้น คำว่า "foo" และ "bar" มักใช้ในการเขียนโปรแกรมเมื่อมีคนไม่สามารถนึกถึงตัวอย่างที่ดีได้

หาก "foo" และ "bar" มาจาก FUBAR ทำไมพวกเขาถึงถูกใช้โดยมืออาชีพจำนวนมากในตัวอย่างการสอนเมื่อตัวอย่างไม่เหมือนอะไรที่เกินกว่าการจดจำ?

สำหรับฉันแล้วการใช้คำเหล่านี้อย่างไม่เหมาะสมคือสิ่งที่เกินกว่าจะจำได้


2
โปรดทราบว่าด้านล่างของคำถามคือแบนเนอร์: เรากำลังมองหาคำตอบยาว ๆ ที่ให้คำอธิบายและบริบท อย่าเพียงแค่ให้คำตอบเดียว อธิบายว่าทำไมคำตอบของคุณถึงถูกต้องนึกคิดด้วยการอ้างอิง คำตอบที่ไม่รวมคำอธิบายอาจถูกลบออก คำตอบของคุณมีคำอธิบายเล็กน้อย ปัจจุบันมันเป็นเพียงความเห็น
Martijn Pieters

มีคำตอบสั้น ๆ อีกมากมาย ทำไมไม่ให้ข้อโต้แย้งถ้าคุณไม่เห็นด้วยกับสิ่งที่ฉันพูดแทนที่จะชี้ให้เห็นถึงเทคนิคที่ไม่ได้ใช้?
จอห์น

แก้ไขในรอบ 2 ทำคำตอบนี้เลวร้ายยิ่งกว่า แต่ก่อน (แม้ว่ามันจะเป็นเรื่องยากที่จะจินตนาการถึงสิ่งที่อาจจะแย่ลง): ตอนนี้ก็เป็นเพียงการซ้ำคำตอบอื่นที่ได้รับการโพสต์ 4 ปีที่ผ่านมา
ริ้น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.