Gotcha (programmazione)
Nella programmazione, un gotcha è una caratteristica di un programma o un linguaggio di programmazione, che lavora in un modo che è corretto dal punto di vista formale – cioè rispetta la sintassi del linguaggio – ma che non è quello che ci si aspetta dal programma, nelle intenzioni del programmatore. Ciò induce all'errore perché tale comportamento è sia facile da riprodurre che completamente inaspettato.
Il termine è una storpiatura della pronuncia dell'espressione inglese I got you, che in questo contesto si potrebbe tradurre con "Ti ho beccato". In questo senso, una resa in italiano accettabile potrebbe essere "trabocchetto".
Gotcha in linguaggio C
modificaOperatore di assegnamento
modificaAd esempio in un programma C, quando scriviamo l'istruzione:
if(a = b)
printf("Hello World\n");
il programma stamperà a video la stringa "Hello World" solo se b è diverso da false, in quanto il programma assegna ad a il valore di b e poi valuta a. Infatti in C, come in molti altri linguaggi, l'operatore di assegnamento (=) è distinto da quello di confronto (==).
Probabilmente il programmatore intendeva scrivere:
if(a == b)
printf("Hello World\n");
che invece valuta se il valore a è uguale a quello del valore b, e in caso positivo stampa la stringa "Hello World".
Questo è appunto il caso di un "gotcha".
Chiamata a funzione
modificaUn altro esempio
/* File name: fortytwo.c */
#include <stdio.h>
foo() {
printf(" 42!\n");
}
int main() {
printf("Qui sotto scriverò '42':\n");
foo;
printf("Penso di aver scritto '42', ma non ne sono sicuro...\n");
return 0;
}
Il programma, dopo essere stato compilato ed eseguito, produrrà in output:
$ ./fortytwo
Qui sotto scriverò '42':
Penso di aver scritto '42', ma non ne sono sicuro...
Ciò che l'espressione foo;
fa – in modo controintuitivo per chi non conosce a fondo il linguaggio – è quello di restituire l'indirizzo di memoria della funzione foo
. Probabilmente il programmatore intendeva effettuare una chiamata a funzione:
foo();
dove le parentesi indicano una chiamata a funzione senza argomenti.
Voci correlate
modificaCollegamenti esterni
modifica- (EN) Denis Howe, Gotcha, in Free On-line Dictionary of Computing. Disponibile con licenza GFDL
- (EN) C Language Gotchas, su greenend.org.uk.