Perché molti esempi di codice, in particolare i tutorial, usano i nomi "Foo" e "Bar" così spesso? È quasi uno standard.
Per esempio:
void foo(char* bar) {
printf("%s", bar);
}
Perché molti esempi di codice, in particolare i tutorial, usano i nomi "Foo" e "Bar" così spesso? È quasi uno standard.
Per esempio:
void foo(char* bar) {
printf("%s", bar);
}
Risposte:
Foo e bar provengono dall'acronimo FUBAR della Seconda Guerra Mondiale dell'esercito americano, "F-ed Up Beyond All Recognition". Un'intera famiglia di questi termini venne ampiamente utilizzata durante le campagne nordafricane e siciliane (1942-43). L'eccellente giornata di battaglia di Rick Atkinson : La guerra in Sicilia e in Italia, 1943-1944, ne fornisce un elenco. Ad esempio, una JANFU è una "Joint Army Navy F Up", come l'incidente dell'11 luglio 1943 quando la flotta di invasione dell'operazione Husky abbatté 23 aerei dell'esercito Air Force C-47 che trasportavano paracadutisti per rinforzare la spiaggia.
Aggiornamento: Wikipedia ha un elenco di acronimi correlati che include alcuni di quelli originali della Seconda Guerra Mondiale elencati da Atkinson.
Qualsiasi programmatore capirà la motivazione per usare foo e bar per nominare le variabili. Certamente hanno fatto parte della cultura C / UNIX sin dall'inizio, e come sottolinea @Walter Mitty, lo hanno preceduto.
Aggiornamento (05/10/2009): ecco la descrizione di Atkinson:
La loro pervasiva "civiltà" li ha resi diffidenti verso lo zelo marziale. "Non eravamo romantici pieni di colpi di mantello e spada", scrisse John Mason Brown, un tenente della Marina militare diretto in Sicilia. "L'ultima guerra era troppo vicina per quello." La vita militare ha infiammato la loro sensibilità ironica e il loro scetticismo. Un singolo acronimo grezzo che catturava le aspettative più basse del soldato - SNAFU, "situazione normale, tutto incasinato" - si era esteso in un vocabolario di cinismo IG: SUSFU (situazione invariata, ancora incasinata); FUMTU (incasinato più del solito); JANFU (cazzata congiunta Army-Navy); JAAFU (stronzo anglo-americano congiunto); FUAFUP (incasinato e incasinato); e FUBAR (incasinato oltre ogni riconoscimento) [Atkinson, p. 36].
Aggiornamento (23/11/2011): @Hugo ha una fantastica lista di antecedenti non militari.
Penso che sia la pronuncia fonetica di fubar.
Che sta per:
Il dizionario del nuovo hacker ha una voce molto buona su questo - e lo considero una risorsa migliore per questo tipo di cose rispetto a Wikipedia:
variabile metasintattica /n./
Un nome usato negli esempi e capito per rappresentare qualsiasi cosa sia in discussione, o qualsiasi membro casuale di una classe di cose in discussione. La parola foo è l'esempio canonico. Per evitare confusione, gli hacker non usano mai (bene, quasi mai) "pippo" o altre parole come nomi permanenti per qualsiasi cosa. Nei nomi di file, una convenzione comune è che qualsiasi nome di file che inizia con un nome di variabile metasintattica è un file di memoria virtuale che può essere eliminato in qualsiasi momento.
In una certa misura, l'elenco delle variabili metasintattiche preferite è una firma culturale. Si verificano sia in serie (utilizzato per gruppi correlati di variabili o oggetti) sia come singleton. Ecco alcune firme comuni:
foo, bar, baz, quux, quuux, quuuux ...:
utilizzo del MIT / Stanford, ora trovato ovunque (grazie in gran parte alle prime versioni di questo lessico!). Al MIT (ma non a Stanford), negli anni '70 e '80, Baz ha smesso di funzionare per un po '. Una recente mutazione comune di questa sequenza inserisce qux prima di quux.bazola, ztesch:
Stanford (dalla metà degli anni '70 in poi).foo, bar, thud, grunt:
questa serie era popolare al CMU. Altre variabili associate alla CMU includono gorp.foo, bar, fum:
questa serie è segnalata come comune su XEROX PARC.fred, barney:
vedi la voce per fred. Questi tendono ad essere Britishism.corge, grault, flarp:
popolare alla Rutgers University e tra gli hacker GOSMACS.zxc, spqr, wombat:
Cambridge University (Inghilterra).vergogna
Berkeley, GeoWorks, Ingres. Pronunciato / vergogna / con un breve / e /.snork
Brown University, primi anni '70.foo, bar, zot
Helsinki University of Technology, Finlandia.blarg, wibble
New Zealand.toto, titi, tata, tutu
Francia.pippo, pluto, paperino
italia. Pippo / pee'po / e Paperino / pa-per-ee'-no / sono i nomi italiani di Pippo e Paperino.aap, noot, mies
Paesi Bassi. Queste sono le prime parole che un bambino ha usato per imparare a scrivere su una tavola di ortografia olandese.Di tutti questi, solo "foo" e "bar" sono universali (e quasi quasi). I composti foobar e "foobaz" godono anche di una valuta molto ampia.
Alcuni termini gergali sono anche usati come nomi metasintattici; barf e mumble, per esempio. Vedi anche Commonwealth Hackish per la discussione di numerose variabili metasintattiche trovate in Gran Bretagna e nel Commonwealth.
Wikipedia fornisce questa definizione di variabile metasintattica :
Nell'informatica, i programmatori usano variabili metasintattiche per descrivere un nome segnaposto o un termine alias comunemente usato per indicare l'oggetto in discussione o un membro arbitrario di una classe di cose in discussione. L'uso di una variabile metasintattica è utile per liberare un programmatore dalla creazione di una variabile con nome logico, che è spesso utile quando si creano o insegnano esempi di un algoritmo. La parola foo è l'esempio principale.
Il termine "variabile metasintattica" si trova principalmente nella letteratura informale. A volte è anche usato come sinonimo di metavariabile.
Qualsiasi simbolo o parola che non viola le regole del linguaggio può essere usato come una variabile metasintattica, ma le parole senza senso sono comunemente usate. Lo stesso concetto viene utilizzato in altri campi in cui è espresso da termini come variabile schematica (vedi forma logica ).
Per analogia matematica: una variabile metasintattica è una parola che è una variabile per altre parole, proprio come nelle lettere dell'algebra vengono utilizzate come variabili per i numeri.
L'articolo fornisce anche esempi comuni di tali variabili in diversi linguaggi di programmazione:
C
Nel seguente esempio del linguaggio di programmazione C, il nome della funzione foo e la barra del nome della variabile sono entrambe variabili metasintattiche. Le righe che iniziano con // sono commenti.
// The function named foo
int foo(void)
{
// Declare the variable bar and set the value to 1
int bar = 1;
return bar;
}
Pitone
Spam, prosciutto e uova sono le principali variabili metasintattiche utilizzate nel linguaggio di programmazione Python. [5] Questo è un riferimento al famoso sketch comico, Spam, di Monty Python, l'eponimo della lingua. [6] Nel seguente esempio spam, ham e eggs sono variabili metasintattiche e le righe che iniziano con # sono commenti.
# Define a function named spam
def spam():
# define the variable ham
ham = "Hello World!"
#define the variable eggs
eggs = 1
return
Rubino
Nell'esempio seguente baz, foo e bar sono variabili metasintattiche e le righe che iniziano con # sono commenti.
# 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
Ecco la risposta di Wikipedia:
I termini foobar, foo, bar e baz sono nomi di segnaposto comuni (detti anche variabili metasintattiche) utilizzati nella programmazione informatica o nella documentazione relativa al computer. Sono comunemente usati per rappresentare valori sconosciuti, in genere quando descrivono uno scenario in cui è compreso lo scopo dei valori sconosciuti, ma i loro valori precisi sono arbitrari e non importanti. I termini possono essere usati per rappresentare qualsiasi parte di un sistema o un'idea complicata, inclusi dati, variabili, funzioni e comandi. Le parole stesse non hanno alcun significato in questo uso e sono rappresentazioni meramente logiche, proprio come le lettere xey sono utilizzate in algebra. Foobar è spesso usato da solo; foo, bar e baz sono di solito usati in quell'ordine, quando sono necessarie più entità.
Foo è entrato nella lingua inglese come un neologismo ed è considerato da molti l'esempio canonico di una variabile metasintattica. [Citazione necessaria] È ampiamente utilizzato negli esempi di programmazione informatica (a volte espressi come "solo una volta") e pseudocodice. Eric S. Raymond l'ha definito un "importante hackerismo" insieme a Kludge e Cruft. [1]
http://en.wikipedia.org/wiki/Foo
E da RFC 3092:
Se usato in combinazione con "bar", è generalmente ricondotto all'acronimo FUBAR ("Fucked Up Beyond All Repair") dell'era della Seconda Guerra Mondiale, successivamente modificato in foobar. Le prime versioni del Jargon File [JARGON] interpretavano questo cambiamento come un bowdlerization del dopoguerra, ma ora sembra più probabile che FUBAR fosse esso stesso un derivato di "foo" forse influenzato dal tedesco "furchtbar" (terribile) - "foobar" potrebbe in realtà è stata la forma originale.
Perché, a quanto pare, la stessa parola "foo" aveva una storia prebellica immediata in fumetti e cartoni animati. Nel cartone animato di Warner Brothers del 1938 diretto da Robert Clampett, "The Daffy Doc", una versione molto antica di Daffy Duck regge un cartello che dice "SILENCE IS FOO!" ... (scatto)
tl; dr
"Foo" e "bar" come variabili metasintattiche sono state rese popolari da MIT e DEC, i primi riferimenti sono in corso su LISP e PDP-1 e Project MAC dal 1964 in poi.
Molte di queste persone erano nel Tech Model Railroad Club del MIT, dove troviamo il primo uso documentato di "foo" nei circoli tecnologici nel 1959 (e una variante nel 1958).
Sia "foo" che "bar" (e persino "baz") erano ben noti nella cultura popolare, in particolare dai fumetti di Smokey Stover e Pogo, che saranno stati letti da molti membri del TMRC.
Inoltre, sembra probabile che i militari FUBAR abbiano contribuito alla loro popolarità.
L'uso del solitario "foo" come parola senza senso è abbastanza ben documentato nella cultura popolare all'inizio del XX secolo, come lo è il FUBAR militare. (Alcuni retroscena: FOLDOC FOLDOC File jargon File jargon Wikipedia RFC3092 )
OK, quindi troviamo alcuni riferimenti.
STOP PRESS! Dopo aver pubblicato questa risposta, ho scoperto questo articolo perfetto su "pippo" nell'edizione di The Tech del venerdì 14 gennaio 1938 ("Il più antico e grande quotidiano del MIT e il primo giornale pubblicato sul web"), Volume LVII. N. 57, Prezzo tre centesimi:
Su Foo-ism
The Lounger pensa che questa attività di Foo-ism sia stata portata troppo lontano dai suoi sostenitori fuorviati, e con la presente prende immediatamente posizione contro il suo abuso. Può darsi che non ci sia foo come un vecchio foo, e ci siamo, ma comunque, un foo e i suoi soldi sono una festa. (Voice from the bleachers- "Non essere sciocco!")
Come espletativo, ovviamente, "pippo!" ha una posizione definita e probabilmente insostituibile nella nostra lingua, anche se temiamo che l'uso eccessivo a cui è attualmente sottoposto possa benissimo comportare la sua caduta in un oblio precoce (e, purtroppo, oscuro). Diciamo ahimè perché un uso corretto della parola può provocare incidenti felici come i seguenti.
Era una lezione di termodinamica delle 8.50 del professor Slater nella Sala 6-120. Il professore, avendo coperto il lato anteriore della lavagna, mise la maniglia che azionava il meccanismo di sollevamento, volgendosi nel frattempo alla classe per continuare la discussione. Il frontone lentamente, maestosamente, si sollevò, rivelando il tabellone dietro di esso, e su quel tabellone, scriveva in grande, i simboli che scrivevano "FOO"!
Il giornale Tech , un anno prima, la Lettera al Direttore, settembre 1937 :
Quando il treno ha raggiunto la stazione, i neofiti sono così pieni delle storie della gloria di Phi Omicron Omicron, di solito indicato come Foo, che sono facili prede.
...
Non è che mi dispiaccia aver perso i miei primi quattro figli a causa della Grande e Universale Confraternita di Phi Omicron Omicron, ma desidero che almeno il mio quinto figlio, il mio bambino, sia avvisato in anticipo.
Spero che il tuo,
Madre indignata di cinque.
E The Tech nel dicembre 1938 :
La tendenza generale del pensiero potrebbe essere meglio interpretata dalle osservazioni fatte alla fine delle votazioni. Un voto ha dichiarato: "Non credo che quello che faccio siano affari di Pulver", mentre un altro ha semplicemente aggiunto un "Foo".
Il "foo" prima documentata nei circoli tecnologia è probabilmente 1959 s' Dizionario della Lingua TMRC :
FOO: la sacra sillaba (FOO MANI PADME HUM); essere parlato solo sotto ispirazione per entrare in comunione con la Divinità. Il nostro primo obbligo è quello di far girare i segnalini Foo.
Questi sono spiegati su FOLDOC . Il compilatore del dizionario Pete Samson ha dichiarato nel 2005:
L'uso di questa parola al TMRC anticipa il mio arrivo lì. Un contatore di foo potrebbe semplicemente avere luci lampeggianti casuali o potrebbe essere un vero contatore con un input oscuro.
E dal Jargon File 4.0.0 del 1996 :
Le versioni precedenti di questo lessico derivavano "baz" come una corruzione di Stanford da bar. Tuttavia, Pete Samson (compilatore del lessico TMRC) riferisce che era già attuale quando si unì a TMRC nel 1958. Dice "Veniva da" Pogo ". Albert l'Alligatore, quando irritato o oltraggiato, urlava" Bazz Fazz! " o "Rowrbazzle!" Si diceva che il layout del club modellasse le (mitiche) contee del New England di Rowrfolk e Bassex (Rowrbazzle si mescolava con (Norfolk / Suffolk / Middlesex / Essex). "
Un anno prima del dizionario TMRC, il MIT Voo Doo Gazette del 1958 ("Humor suplement of the MIT Deans 'office") (PDF) menziona Foocom, in "The Laws of Murphy and Finagle" di John Banzhaf (uno studente di ingegneria elettrica) :
Ulteriori ricerche condotte nell'ambito di una sovvenzione congiunta di Foocom e Anarcom hanno ampliato la legge per renderla tutto abbracciata e universalmente applicabile: se qualcosa può andare storto, lo farà!
Anche 1964 's MIT Voo Doo (PDF) fa riferimento l'utilizzo TMRC:
Sì! Voglio essere un successo immediato e clienti della neve. Mandami una laurea in: ...
Contatori di Foo
Foo Jung
Ma ricordiamo che questa domanda riguarda esempi di codice, quindi troviamo "foo", "bar" e "foobar" pubblicati nel codice.
Quindi, il file Jargon 4.4.7 dice di "foobar":
Probabilmente originariamente propagato attraverso i manuali DECsystem di Digital Equipment Corporation (DEC) negli anni '60 e nei primi anni '70; avvistamenti confermati risalgono al 1972.
Il primo riferimento pubblicato che posso trovare è del febbraio 1964 , ma scritto nel giugno 1963, Il linguaggio di programmazione LISP: il suo funzionamento e le applicazioni di Information International, Inc., con molti autori, tra cui Timothy P. Hart e Michael Levin:
Pertanto, poiché "FOO" è un nome per se stesso, "COMITRIN" tratterà sia "FOO" che "(FOO)" esattamente allo stesso modo.
Include anche altre variabili metasintattiche come: FOO CROCK GLITCH / POOT TOOR / ON YOU / SNAP CRACKLE POP / XYZ
Mi aspetto che questo sia più o meno lo stesso di questo prossimo riferimento di "pippo" del Project MAC del MIT nel gennaio 1964 con AIM-064, o Esercizi LISP di Timothy P. Hart e Michael Levin:
auto [((FOO. CROCK). GLITCH)]
Condivide molte altre variabili metasintattiche come: CHI / BOSTON NEW YORK / SPINACH BUTTER STEAK / FOO CROCK GLITCH / POOT TOOP / TOOT TOOT / ISTHISATRIVIALEXCERCISE / PLOOP FLOT TOP / SNAP CRACKLE POP / ONE TWRE THREE / PLANE SUB THRESHER
Sia per "pippo" che per "bar" insieme, il primo riferimento che ho potuto trovare è dal Project MAC del MIT nell'AIM-098 del giugno 1966 , o LISP PDP-6, nientemeno che da Peter Samson:
EXPLODE, come PRIN1, inserisce barre, quindi (EXPLODE (QUOTE FOO / BAR)) PRIN1 come (FOO // / BAR) o PRINC come (FOO / BAR).
Qualche altro richiamo.
@Walter Mitty ha ricordato su questo sito nel 2008:
Secondo il file del gergo relativo a Foo Bar. Posso risalire almeno al 1963 e al numero seriale 2 del PDP-1, che si trovava al secondo piano dell'Edificio 26 al MIT. Furono usati Foo e Foo Bar, e dopo il 1964 nella sala PDP-6 del progetto MAC.
John V. Everett ricorda nel 1996:
Quando mi sono unito a DEC nel 1966, il foobar era già comunemente usato come nome di file usa e getta. Credo che il fubar sia diventato foobar perché il PDP-6 supportava sei nomi di personaggi, anche se ho sempre assunto il termine migrato a DEC dal MIT. A quei tempi c'erano molti tipi MIT al DEC, alcuni dei quali avevano lavorato con il CTSS 7090/7094. Poiché 709x era anche una macchina a 36 bit, il foobar potrebbe essere stato usato come nome di file comune lì.
Foo e bar erano anche comunemente usati come estensioni di file. Poiché gli editor di testo del giorno operavano su un file di input e producevano un file di output, era comune modificare da un file .foo in un file .bar e viceversa.
Era anche comune usare foo per riempire un buffer durante la modifica con TECO. La stringa di testo per riempire esattamente un blocco del disco era IFOO $ HXA127GA $$. Quasi tutti i programmatori PDP-6/10 con cui ho lavorato utilizzavano la stessa stringa di comando.
Daniel PB Smith nel 1998:
Dick Gruen aveva un dispositivo nella sua stanza del dormitorio, il solito assemblaggio di batteria B, resistori, condensatori e tubi al neon NE-2, che ha definito un "foo counter". Sarebbe stato circa nel 1964.
Robert Schuldenfrei nel 1996:
L'uso di FOO e BAR come nomi di variabili di esempio risale almeno al 1964 e all'IBM 7070. Anche questo potrebbe essere più vecchio, ma è lì che l'ho visto per la prima volta. Questo era in Assembler. Quale sarebbe l'equivalente intero FORTRAN? IFOO e IBAR?
Paul M. Wexelblat nel 1992:
Il primo assemblatore PDP-1 utilizzava due caratteri per i programmatori di simboli (macchine a 18 bit) che lasciavano sempre alcune parole come spazio per le patch per risolvere i problemi. (Salta allo spazio patch, fai nuovo codice, salta indietro) Quello spazio convenzionalmente si chiamava FU: che stava per Fxxx Up, il posto in cui hai riparato Fxxx Ups. Quando si parlava, era noto come spazio FU. Gli assemblatori successivi (ad es. MIDAS hanno consentito tre tag di caratteri in modo che FU diventasse FOO, e come TUTTI i programmatori PDP-1 ti diranno che era spazio FOO.
Bruce B. Reynolds nel 1996:
Sul lato IBM di FOO (FU) BAR è l'uso del lato BAR come Base Address Register; a metà degli anni '70 i programmatori CICS dovevano preoccuparsi dei vari xxxBAR ... Penso che uno di questi fosse FRACTBAR ...
Ecco una vera "BAR" IBM del 1955.
Altri primi riferimenti:
1973 foo bar Consiglio congiunto internazionale sull'intelligenza artificiale
1975 foo bar Consiglio congiunto internazionale sull'intelligenza artificiale
Non sono stato in grado di trovare riferimenti a foo bar come "segnale foo invertito" come suggerito in RFC3092 e altrove.
Ecco alcuni dei precedenti F00 ma penso che siano coincidenze / falsi positivi:
usare parole come "pippo" e "barra" ti fa concentrare sul concetto e non su ciò che puoi capire in base ai termini che conosci. Per esempio:
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");
}
}
Il codice sopra ti consente di ricorrere alla tua conoscenza delle cose del mondo reale.
Se stai cercando di spiegare un concetto in cui la parte importante non è ciò che viene fatto (ad esempio stampando miagolio o abbaio) ma su come viene fatto, rimuovendo le parti che ti sono familiari aiutano:
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");
}
}
Ora devi concentrarti su ciò che sta realmente accadendo, non sei più in grado di indovinare cosa accadrà.
Quindi, la versione breve è che foo, bar e simili, sono usati per sottolineare concetti in cui il contenuto non conta davvero ma l'idea lo fa.
Da http://en.wikipedia.org/wiki/Foobar
Nella tecnologia, la parola fu probabilmente propagata originariamente attraverso i manuali di sistema della Digital Equipment Corporation negli anni '60 e nei primi anni '70. Un'altra possibilità è che il foobar si sia evoluto dall'elettronica, come segnale foo invertito. Questo perché se un segnale digitale è attivo basso (quindi una condizione di tensione negativa o zero rappresenta un "1"), una barra orizzontale viene comunemente posizionata sopra l'etichetta del segnale. Il Jargon File fa un caso che probabilmente precede FUBAR
Dai file Jargon http://www.catb.org/jargon/html/F/foo.html
pippo: / pippo /
bar: / bar /, n.
Secondo http://en.wikipedia.org/wiki/Foo :
Le origini dei termini non sono note con certezza e sono state avanzate diverse teorie aneddotiche per identificarle. Foobar potrebbe derivare dall'acronimo volgare militare FUBAR, oppure potrebbe aver guadagnato popolarità a causa del fatto che è pronunciato lo stesso.
Secondo il file del gergo relativo a Foo Bar.
Posso risalire almeno al 1963 e al numero seriale 2 del PDP-1, che si trovava al secondo piano dell'Edificio 26 al MIT. Furono usati Foo e Foo Bar, e dopo il 1964 nella sala PDP-6 del progetto MAC.
Per quanto ne so, viene da pippo pippo, che è un'alterazione di "fubar", un phraase cattura militare che sta per " F *** ed u p b eyond un ll r eCognition."
Inoltre, potrebbero esserci altre fonti.
Foo and Bar (altrimenti noto come FUBAR ... F *** ed Up Beyond All Recognition) è stato appena usato come nome generico standard per cose come classi, proprietà, nomi di metodi, ecc.
Fondamentalmente l'idea è di trasmettere il tuo codice senza quante più informazioni estranee che potrebbero eventualmente allontanarsi da come funziona il codice (cioè non abbiamo bisogno di sapere che la tua funzione è chiamata AddUser per vedere il codice e capire cosa fa se lo rinominiamo a Foo ()).
Queste sono parole senza senso che nella maggior parte dei casi possono essere sostituite con parole di esempio più pertinenti. Le parole "foo" e "bar" sono spesso utilizzate nella programmazione quando qualcuno non riesce a pensare a un buon esempio.
Se "foo" e "bar" sono derivati da FUBAR, perché vengono utilizzati da così tanti professionisti negli esempi di istruzioni quando gli esempi non assomigliano a nulla che viene scoperto oltre il riconoscimento?
Per me, l'uso comune di queste parole in modo inappropriato è ciò che è così inventato oltre il riconoscimento.