De ce't sfori fi mutabil în Java și .NET?



De ce este că ei au decis să facă "String" imuabil în Java și .NET (și alte limbi)? De ce nu't se face mutabil?
Potrivit [Java](http://www.oracle.com/technetwork/java/effectivejava-136174.html), capitolul 4, pagina 73, ediția a 2-a:



> 
> "sunt multe motive pentru acest lucru: Imuabil clase sunt mai ușor de a
> proiectarea, implementarea, și de a folosi decât mutabil clase. Acestea sunt mai puțin predispuse
> pentru eroare și sunt mai sigure.
> 
> 
> [...]
> 
> 
> "**Imuabil obiecte sunt simple.** Un obiect imuabile poate fi în
> exact un stat, statul în care a fost creat. Dacă vă asigurați-vă că
> că toți constructorii stabili invarianți, atunci este
> garantat că aceste invariante va rămâne valabil pentru toate timpurile, cu
> nici un efort din partea ta.
> 
> 
> [...]
> 
> 
> **Imuabil obiecte sunt în mod inerent thread-safe; ele nu necesită sincronizare.** Ele nu pot fi corupt de mai multe fire
> accesarea lor în același timp. Acest lucru este, de departe, cea mai simplă abordare
> pentru realizarea fir de siguranță. În fapt, nici un fir poate observa orice
> efect de un alt fir de pe un obiect imuabile. Prin urmare,
> **imuabil obiecte pot fi partajate în mod liber**
> 
> 
> [...]
> 
> 
> 


Alte puncte mici din același capitol:



> 
> Nu numai că puteți partaja obiecte imuabile, dar puteți partaja lor interne.
> 
> 
> [...]
> 
> 
> Imuabil obiecte face mari blocuri de constructii pentru alte obiecte, dacă mutabile sau imuabile.
> 
> 
> [...]
> 
> 
> singurul dezavantaj real al imuabil clase este că au nevoie de un obiect separat pentru fiecare valoare distinctă.
> 
> 
>
„Expressive“ înseamnă că este ușor de a scrie cod care este ușor de înțeles, atât pentru compilator și pentru un cititor uman.


Doi factori care fac pentru expresivitate:


* constructe intuitiv care pot fi citite
* lipsa de cod boilerplate


Comparați acest expresiv Groovy, cu eqivalent Java mai puțin expresiv:



```
3.times {
   println 'Hip hip hooray'
}

```

vs



```
for(int i=0; i<3; i++) {
    System.out.println("Hip hip hooray");
}

```

Uneori tranzactionati de precizie pentru expresivitate - exemplul Groovy funcționează pentru că se presupune lucruri pe care Java face să specificați în mod explicit. j7 pentru că e mai performant și mai nou. Mă aștept răspunsul real este pur și simplu: nu a fost un bun exemplu de utilizare. Pentru cazuri, avantajul este acela că permite o fluente API asupra tipurilor existente (care nu se furnizează logica) - și anume



```
var foo = data.Where(x=>x.IsActive).OrderBy(x=>x.Price).First();

```

care permite LINQ:



```
var foo = (from x in data
           where x.IsActive
           order by x.Price
           select x).First();

```

Cu metode statice, acest lucru pur și simplu nu este o problemă, astfel încât nu există nici o justificare; doar utiliza metoda statică pe al doilea tip.


Așa cum este, metodele de extensie nu sunt *corect* obiect orientate - ele sunt un abuz pragmatic pentru a face viața mai ușoară în detrimentul purității. Nu a fost nici un motiv pentru a dilua metode statice în același mod. incearca cu java 6:)
nu java8
nu java5
:) nu găsești nicăieri pe internet răspunsul la întrebarea "în ce limbaj de programare se dezvoltă aplicațiile de android"? 
o simplă căutare pe google ți-ar fi oferit 7, 680, 000 de rezultate.

hai să te ajut eu să ajungi mai repede șef de echipă. limbajul oficial este java. dacă devii expert în java, ai viitorul asigurat. este un bug de la joc.de aceea se invart toate.
asa mi-a facut si mie.
funda! pentru orice din programarea imperativa functiile fac acelasi lucru
input->[functie/black box]->output
https://www.techopedia.com/definition/25615/function

si o sa te contrazic cu o chestie, da e flexibil pythonul pentru ca fiind un limbaj de scripting are avantajele lui, dar puternic? nu prea, pentru ca fiind un limbaj de scripting e greoi fata de c/c++ care sunt limbaje compilate. in opinia mea cel mai puternic limbaj e c++ deoarece poti face o gramada de dracovenii prin el(de la oop la functional programming nu ai treaba) dar lumea fuge de el pentru ca pointeri.

iar chestia cu in python stochezi in liste e asa puerila afirmatia ta, in python pe langa liste mai ai tuple, dictionare sa nu mai spun de alte structuri aflate prin diferite pachete. buna! nu poti transfera credit de pe o retea pe alta.:( normal! acest sistem de operare este pus doar pentru ca-i gratuit si nu mai trebuie platita licenta la windows. de altfel eu lucrez pe linux si doar datorita unei imprimante tampita m-am intors pe windows, bata-l dracu! pentru ca pess nu este asa de bun.eu am fifa08 si 11 si am la transferuri facute dar toate intr-o liga. nu din liga b duci in liga a.