Ho deciso di imparare Perl come mia prossima lingua e attualmente sto leggendo i contesti scalari ed elenchi, sebbene questa domanda non sia specificamente legata al Perl, lo inserirò in un contesto Perl (ah, capito? !)
Quindi, l'idea di base è che gli operatori si aspettino un valore scalare o di lista e se ottengono un argomento di un tipo diverso da quello che si aspettano, lo convertiranno nel contesto appropriato.
Un paio di esempi dei contesti corretti usati:
# Scalar context
$first_number = 2;
$second_number = 3;
say 3+2; # This obviously prints 5
# List context
@array = qw (one two three);
@array = reverse @array;
say @array; # Prints threetwoone
Ora, se mescoli i contesti, puoi ottenere qualcosa di simile a questo:
$first_number = 2;
@array = qw (one two three);
$result = 2 + @array;
say $result; # This prints 5
Questo perché l'uso di un array in un'operazione matematica restituisce invece la lunghezza dell'array.
Ora, la domanda è: perché mai vorresti farlo a meno che tu non sia una persona malvagia e vuoi rendere le persone leggere il tuo codice infelice? Sarebbe troppo mainstream usare invece qualcosa come 2 + $#array
?
In generale, è buona pratica di programmazione lasciare che la lingua si occupi di questo tipo di scenario? Non sarebbe meglio se il programmatore si prendesse cura delle variabili e preparasse i dati in modo che tutti gli operatori ricevessero il tipo di argomento corretto in primo luogo?