Perché le lingue OO mainstream non hanno immutabilità a livello di classe integrata? [duplicare]

3

Scrivo regolarmente classi che possono avere solo istanze immutabili, proprio come una stringa.

Mi chiedo perché Java o C # o VB.NET non abbiano immutabilità integrata nella lingua? In questo modo, posso comunicare meglio l'immutabilità ai miei colleghi programmatori e anche fare supposizioni sullo stato in classe.

Ad esempio:     classe immutabile Foo {         stringa pubblica Nome {get; impostato; } // errore di compilazione: proprietà mutabile sulla classe immutabile     }

    
posta Ruudjah 24.01.2015 - 20:17
fonte

1 risposta

6

C # fa ha immutabilità integrata. Così fa Java e VB.NET.

Mutevole:

public class Counter
{
   private int count;

   public Counter(int initialCount)
   {
       count = initialCount;
   }

   public void Increment()
   {
       count++;
   }
}

Immutabile:

public class Counter
{
   private readonly int count;  // 'final' for Java

   public Counter(int finalCount)
   {
       // set at construction time, but readonly, so can't modify.
       count = finalCount;
   }

   public void Increment()
   {
       // Invalid operation
       count++;
   }
}

Si noti che sto usando "immutabilità" intendere "set una volta durante la costruzione di un oggetto". Le costanti non sono molto utili in questo contesto, perché possono essere impostate solo in fase di compilazione.

Se scavi abbastanza in profondità, ogni linguaggio di programmazione muta lo stato sotto il cofano, perché è così che vengono progettate le istruzioni del processore.

    
risposta data 24.01.2015 - 21:43
fonte

Leggi altre domande sui tag