¿Usar struct o class?

#1

La historia dice así: “Tenía un struct, creció bastante y tuve pasarlo a class. Googleando encontré este artículo y otro artículo me pareció interesante para compartirlo.

Un poco de TLDR;

  • structs son para datos sencillos.
  • Mutating functions son en realidad semantic sugar para crear OTRA instancia nueva con el valor cambiado.
  • Tratar de evitar los mutating structs.
  • Tratar de evitar los structs profundamente anidados.
  • Tener en cuenta que son value types, si ocupan mucho espacio en memoria pueden ser un problema.
  • Si tenés que sobrecargar == para comparar 2 elementos y suena una buena idea, podés usar un struct. Si te hace un poco de ruido, usar class.

¿Piensan igual? ¿Alguna recomendación para agregar?

#2

No es que en 4.2+ Equatable se sintetiza solo?

A mi me hacía mucho ruido al principio lo de mutating, y, como decís vos, trato de evitarlo, PERO, a veces pienso que si casi toda la stdlib está hecha en términos de structs, tan malo no puede ser…

Últimamente estoy tratando de inclinarme más aceptar la mutabilidad de las structs, pero sigo teniendo dudas respecto de casos como structs anidadas mutables y esas cosas

#3

Encontré información sobre mejoras en Hashable, no en Equatable.

#4

plop https://github.com/apple/swift-evolution/blob/master/proposals/0185-synthesize-equatable-hashable.md

TL;DR: solamente tenes que especificar que tu struct conforma a Equatable sin implementar nada y listo, 4.1 en adelante

#5

Nice! :+1:

1 me gusta
#6

En la dotSwift hubo una charla que dio un chico de apple.

Una de sus conclusiones fue que structs vs classes es una discusion semantica, no de performance. En general uno puede creer que como se copian al ser asignados o pasados por parametro, deberian ser mas lentos.

1 me gusta