Domanda

Sarebbe davvero bello se C # consentisse un operatore ?? =. Mi sono ritrovato a scrivere spesso quanto segue:

something = something ?? new Something();

Preferirei scriverlo in questo modo:

something ??= new Something();

Pensieri? Le nuove estensioni di lingua sono sempre controverse per loro natura.

È stato utile?

Soluzione

Sono sinceramente strappato all'operatore = ++ in primo luogo, e il suo utilizzo è piuttosto diffuso e comune. Da un punto di vista della chiarezza, la coppia extra di caratteri che devi digitare probabilmente non vale la pena cambiare la lingua per aggiungere un ?? =. Se questo fosse un voto, voterei contro quel cambiamento di lingua (buona domanda, cattiva idea. :-)

Non ho provato questo, ma potresti mappare ?? = a una macro in Visual Studio che ha appena fatto la riscrittura per te?

Altri suggerimenti

Altri linguaggi di programmazione come Ruby lo usano abbastanza frequentemente:

something ||= Something.new

Se "qualcosa" è un campo privato per un accedente di proprietà, è possibile effettuare le seguenti operazioni .... questo eseguirà l'assegnazione se il campo fosse ritenuto nullo.

private Something something;
public Something Something
{
    get
    {
        return something ?? (something = new Something());
    }
}

Non sono necessariamente contrario all'operatore, tuttavia, quel tipo di riutilizzo delle variabili non sembra proprio il modo "giusto". per me. I bug che avrebbero dovuto essere ovvi puntatori NULL finiscono popolati con dati imprevisti e funzionano in qualche modo inaspettato, ecc ....

L'ho effettivamente implementato per PHP7. Ora è in fase di proposta RFC. https://github.com/php/php-src/pull/1795

In realtà era una domanda sull'operatore null coalescente in PHP7. Controlla questo:

$this->request->data['comments']['user_id'] = $this->request->data['comments']['user_id'] ?? ‘value’;
I want to check if some var is null and if the same var is null set the same var to ‘value’.

Quindi sto ripetendo la stessa variabile dopo l'operatore uguale, questo non sembra giusto.

Quindi sento che abbiamo bisogno di un altro operatore come & # 8220; ?? = & # 8220; simile a + =;

$ this- > request- > data ['commenti'] ['user_id & # 8217;] ?? = & # 8216; valore & # 8217 ;. Quindi, se var è null, è impostato su "valore" # 8217; e altro rimane lo stesso.

In quella richiesta pull ho provato a implementarlo.

$ sapi/cli/php -r '$num = null;$num ??= 5; echo $num;'
5

Poiché ?? è una scorciatoia per usare l'operatore ternario in un modo simile a:

(myObject != null) ? myObject : somethingElse;

piuttosto che una scorciatoia per un'operazione aritmetica, non credo che un'operazione ?? = sia adatta. È un operatore condizionale.

Direi che l'operatore ?? e più pertinentemente il modello sopra non è così comune e quindi un nuovo operatore è eccessivo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top