News for hackers. Stuff that matters.
Re:From first principles: Why I bet on Scala.js by oever on Thursday August 11, 2016 @03:42AM (#12266760)
Closure Compiler uses type annotations on variables and functions that give information on null and undefined. These annotations look like {?Object|undefined} (Object may be null or undefined) and {!Object} (object is guaranteed to not be null).

In Java, NullPointerExceptions is huge problem. IDEs have plugins to check for this error, but there is no standard solution.

Does Scala help in avoiding NullPointerExceptions? Do function signatures specify if a value may be null?

Re:From first principles: Why I bet on Scala.js by gmartres on Thursday August 11, 2016 @08:35AM (#12267685)
Scala does not have non-nullable types currently (but that might happen in the future), in practice this is not a problem simply because using null is seen as a code smell and basically no Scala library API expects parameters to be null or return null, optional values are usually represented with the standard library class Option: http://www.scala-lang.org/api/2.11.8/#scala.Option
Re:From first principles: Why I bet on Scala.js by oever on Thursday August 11, 2016 @12:08PM (#12269390)
One of the main points of the blog is that Scala.js integrates well with the JavaScript apis and those apis are full of null. A typical loop in the DOM looks like this:

    var node = element.firstChild;
    while (node) {
        // do something
        node = node.nextSibling;
    }
Perhaps those interfaces use the Option class?
Re:From first principles: Why I bet on Scala.js by oever on Thursday August 11, 2016 @06:14PM (#12272019)
I wrote a small test function. It appears that Scala.js has no default protections against null values from the browser DOM.

  def printNodes(targetNode: dom.Node): Unit = {
    var c = targetNode.firstChild        
    while (c != null) {
      if (c.nodeValue != null) {
        println(c.nodeValue)
      }
      c = c.nextSibling
    }
  }
The return value from firstChild and nextSibling can be null.