Estoy trabajando en Project Euler, y encontré una omisión ligeramente sorprendente: No hay String#shift
, unshift
, push
, o pop
. Había asumido que una Cadena se consideraba un objeto "secuencial" como una Matriz, ya que comparten la capacidad de ser indexados e iterados, y eso incluiría la capacidad de cambiar fácilmente el principio y el final del objeto.¿Por qué no hay un String # shift()?
Sé que hay formas de crear los mismos efectos, pero ¿hay alguna razón específica por la que String no no tenga estos métodos?
probablemente porque si la cadena tenía esos métodos, las personas utilizarían. Y eso sería algo malo. Ver también: "Pit of Success". Usted no quiere que la forma más fácil sea también la incorrecta. – Jimmy
¿Por qué sería algo malo? – Zabba
@Zabba: en muchos idiomas, las cadenas son algo inmutables. Esto te permite hacer trucos como tablas internas, pero también significa que si insistes en mutar mucho una cuerda, es tremendamente ineficiente. El ejemplo clásico es la pregunta de entrevista de .NET "gotcha" de todos los tiempos "¿Qué pasa con el siguiente código?" (es algo así como 'bar =" "; foreach (var foo in frob) bar + = foo;') – Jimmy