3 ms·
Can you list those same features that it provides? My understanding of Scala's philosophy is it provides as many features as it can. A Maybe type, immutable s
by tieTYT 13y ago
Can you list those same features that it provides? My understanding of Scala's philosophy is it provides as many features as it can. A Maybe type, immutable state, separation of IO, etc. isn't very useful if my coworker can choose not to use it.
- ionforce 13y agoScala is like Perl in that there is a non-zero possibility of writing non-native code. In Scala, you're supposed to favor immutability and functional constructs, but there's nothing preventing you from treating Scala exactly like Java. Same with Perl and C. Also, if you need a language to dictate your coworker's behavior, that says something more about your coworker than the language. Why doesn't he just choose to write good code? (barring arguments regarding the activation energy of good versus bad code)
- ericssmith 13y agoI assume by "non-native", you mean "non-idiomatic"? Since I recently went through coworkers writing "bad" (by which I mean non-idiomatic) Scala, and repairing the situation, I can say that it was surprisingly easy to lay down "functional constructs" and the result was amazing. The code became reliable, well-structured, and easy to leverage. Switching to Scala for our projects -- including introducing procedurally minded programmers to it -- was a huge win for us.
- pspeter3 13y agoYeah, we discovered that for my team's projects as well. Having a scala "guru" define and teach idiomatic scala has actually increased our productivity a lot. Any non-idiomatic scala is now purely for interacting with our existing Java libraries
- ericssmith 13y agoFWIW, the constructs with the initial biggest win for us (in converting procedural thinking) were pattern matching and option types. For pattern matching, the guidelines were - Don't do any processing after the pattern match within a function; break into smaller functions - Reach for pattern matching before if/else - Avoid the use of var - Avoid dropping through to wildcard pattern. (This tip was from Yaron Minsky of OCaml fame) In conjunction with preferring the use of combinators over loops, and using Option (and being forced to think about None), we got surprisingly functional Scala code in a short time.
- ionforce 13y agoYou are correct; I should have said non-idiomatic rather than non-native. But idiomatic writers do feel like natives!
- pkolaczk 13y agoSometimes it is good to drop into non-idiomatic, imperative code for the sake of performance. This is one of the things I like Scala for - it lets you choose your poison.
- spullara 13y agoScala cannot choose it if you code review. If you don't code review, you are probably in a mixed quantum state anyway, regardless of the language.
- tome 13y agoBut that's the point. Not in Haskell! (Or almost not :) Haskell goes out of its way to make it hard to do "dangerous" things by accident.
- lmm 13y agoIn theory that's true, and I hope Scala eventually makes non-null, immutability and perhaps even I/O visible at the type level. In practice as long as it's clear when you are bypassing these systems, and you have a culture of not doing so (and the language libraries are part of the same culture), you get most of the benefits. Even in Haskell you can cast out of your type system, or unsafePerformIO, no?