Uma compreensão de estruturas de dados imutáveis

Estou aprendendo scala e, como bom aluno, tento obedecer a todas as regras que encontrei.

Uma regra é: IMUBILIDADE !!!

ntão tentei codificar tudo com estruturas de dados imutáveis e vals, e às vezes isso é realmente difíci

Mas hoje eu pensei comigo: a única coisa importante é que o objeto / classe não deve ter estado mutável. Não sou obrigado a codificar todos os métodos em um estilo imutável, porque esses métodos não se afeta

Minha pergunta: Estou corrigindo ou existem problemas / desvantagens que não vejo?

EDITAR

xemplo de código para aishwarya:

def logLikelihood(seq: Iterator[T]): Double = {
  val sequence = seq.toList
  val stateSequence = (0 to order).toList.padTo(sequence.length,order)
  val seqPos = sequence.zipWithIndex

  def probOfSymbAtPos(symb: T, pos: Int) : Double = {
    val state = states(stateSequence(pos))
    M.log(state( seqPos.map( _._1 ).slice(0, pos).takeRight(order), symb))
  }

  val probs = seqPos.map( i => probOfSymbAtPos(i._1,i._2) )

  probs.sum
}  

Explication: É um método para calcular a probabilidade logarítmica de um modelo homogêneo de Markov de ordem variável. O método de estado apply pega todos os símbolos anteriores e o próximo símbolo e retorna a probabilidade de fazê-l

omo você pode ver: todo o método está apenas multiplicando algumas probabilidades que seriam muito mais fáceis usando var

questionAnswers(3)

yourAnswerToTheQuestion