Just to give you a small example, why functional style is encouraged, imagine you have 2 lists of integers of not guaranteed same size and you have to create a new list of integers with all the sums up to the length of the shorter list. In an imperative style, you would do something like this:
val list1 = List(1,2,3,4,5)
val list2 = List(1,2,3,4,5,6,7)
// imperative way
val newList = collection.mutable.ListBuffer[Int]()
val length = math.min(list1.size, list2.size)
for(i <- 0 until length) {
newList += list1(i) + list2(i)
}
// functional way
list1.zip(list2).map { case (x,y) => x+y }
See, the second example is much smaller and much more focused on "what" to do and not "how" to do it. Everyone has to start at some point and at first you can write normal imperative code, but sooner or later you will adopt more and more functional paradigms, just because they make your code a lot better and safer.