Opposto di mutare [chiuso]

-2

Sto cercando un aggettivo; uno che descrive l'opposto di "mutare". Voglio usarlo per contrassegnare funzioni, metodi e parametri del metodo (incluso il ricevitore) come "non essere mutato" dalla funzione, simile a come fa il linguaggio D.

L'approccio

Ds funziona piuttosto bene per i parametri:

class X {
    void foo(const int x, immutable char[] y) {
        // x is readonly
        // y is readonly and can be trusted not to change
    }
}

Tuttavia, sia immutable che const sembrano brutti quando li si utilizza sulla funzione / metodo stesso per indicare che la funzione non modifica l'oggetto destinatario:

// again D
class X {
    private int x;

    void foo() const {
        // x becomes readonly because the method is marked s such
    }

    void foo2() immutable {
        // same as foo(): x is readonly
    }
}

Sto cercando una parola chiave con la stessa semantica delle parole chiave di cui sopra in D; ma come aggettivo da scrivere prima del nome della funzione:

class X {
    private x: int
    non-mutating foo() {
        // x is readonly
    }
}

Usando immutable si legge come se il metodo fosse immutabile (come finale in Java o non-Virtual in C # / C ++). Non posso usare la parola chiave dopo che la parentesi chiude l'elenco dei parametri perché questo è il posto dove dovrebbe andare il tipo di ritorno:

fun x() -> Int

Non sono completamente sicuro se questo è il posto giusto per porre questa domanda. Ma dal momento che non ho trovato un programming language design SE , ho capito che le persone che conoscono molti linguaggi di programmazione in questa community potrebbero darmi alcuni suggerimenti:)

    
posta marstato 30.04.2017 - 23:44
fonte

2 risposte

3

In OO speak, le funzioni che sono conosciute per cambiare i dati sono chiamate modificatori e quelle che sono conosciute per restituire qualcosa senza modifiche sono chiamate selettori . Non sento spesso i termini, in qualche modo non sono popolari. Più popolari sono getters e setters .

Quindi potresti usare i qualificatori selettore e modificatore o getter e setter rispettivamente.

La maggior parte delle persone assocerebbe getter e setter con proprietà. Questo potrebbe essere un motivo per scegliere gli altri termini apparentemente dimenticati.

Se ti interessa solo la mutabilità di argomenti specifici, readonly potrebbe essere appropriato.

    
risposta data 01.05.2017 - 13:48
fonte
0

I tuoi argomenti sull'utilizzo di immutable o const sui nomi dei metodi non convince. È fatto in C ++ e D. Qual è esattamente la tua obiezione? Perché senti che è brutto?

Potresti sempre metterli in una posizione diversa, ad esempio void const funcName() o const void funcName() , ma ti imbatti in problemi con il tipo di ritorno che è const . Ad esempio, se vuoi restituire un oggetto const , verrebbe probabilmente dichiarato come const ObjectType funcName() , quindi non va bene.

Swift e Haskell usano -> per i tipi di ritorno, quindi potresti andare con una sintassi simile a quella? Potresti fare qualcosa come const funcName -> Int per una funzione costante che restituisce un Int . E poi potresti fare const funcName :: argumentType -> Int per una funzione costante che accetta un argomento di argumentType e restituisce un int , o qualcosa del genere.

    
risposta data 01.05.2017 - 05:09
fonte

Leggi altre domande sui tag