Hacker News new | past | comments | ask | show | jobs | submit login
Pythonic syntax to declutter Javascript (azarask.in)
41 points by mcantelon on Jan 14, 2010 | hide | past | web | favorite | 33 comments

Javascript example in the article:

  function triangle(a,b){
    if(a > 0 && b > 0 ){
      function sqroot(x){
        if( x > 0 ){
          return Math.pow(x,.5);
        else {
          return 0;
      return sqroot( a*a + b*b );
    else {
      return 0;

Can be made much cleaner:

  function triangle(a,b){
    if (a <= 0 || b <= 0 ) return 0
    function sqroot(x){ return ( x > 0 ? Math.pow(x,.5) : 0 ) }
    return sqroot( a*a + b*b )

I don't know about a whitespace-sensitive language in the browser. Much JS is written by non-coders, later quickly edited on live servers (yeah, I know. But that's reality) etc.. It all comes down to taste, of course, but personally I find Ruby at least as readable as Python, so I'm not sure whitespaces are where the elegance is found.

With JavaScript 1.8.1:

    function triangle(a,b)
        a <= 0 || b <= 0 ? 0 : (a = a*a + b*b) > 0 ? Math.pow(a,.5) : 0;

Is ?: really not right-associative in JavaScript? I thought PHP was the only language that messed that one up...

I wrapped it with parentheses out of habit. updated

That's a relief :)

Doesn't work on V8, at least not on the version I am using. Which JS engine is 1.8.1 complaint?

SpiderMonkey in Firefox 3.5 and above.

Nothing against python, but pyscript is terrible idea to go in the browser? Why? Because you can't remove the spaces, you can't compress your source code so that it uses less bandwidth.

Also really, honestly, I hate to post python script somewhere in forum, and because of the identation someone else cannot test it.

Hey there is clojurehub@appspot.com - right - you type something in google.wav - send it to the address above, and the clojure appspot program gives you back the result - nice REPL :)

Now how would that work with python, or this pyscript? Just thing about it?

I would imagine you pre-process the pyscript before sending it to the browser as part of your deploy step. So you don't have the compression issues.

Actually, it looks like a separate script translates all script blocks with type="text/pyscript"

You can't minify, but you can still gzip.

This is reminiscent of those occasional attempts to "fix" Lisp's parentheses. In practise, I've never found JavaScript's braces and semicolons distracting. I just don't notice them that much.

JavaScript has been fixed, and its new name is jQuery.

jQuery only attempts to deal with the DOM. Confusing a browser API and a programming language is a mistake to be avoided.

Broadly speaking, I honestly agree with this.

Awesome, thanks. Going to see if I can use this for my crypto class (the project is to build an encryption system on top of Twitter, using GreaseMonkey).

Also - reminds me of CoffeeScript (which has similarly clean (if less Pythonic) syntax, but has to be compiled to Javascript, I believe). http://jashkenas.github.com/coffee-script/#overview

The stark modern minimalism of the language causes the meaning of code to float on the syntax like a feather on water.

I think Python is dandy. I will be starting a new project on it, actually. But "stark" and "modern" are relative. While there's a lot of very pretty Python that reads like pseudocode, there's also a bit of Python that goes down the same sinful path as C header files or Perl in the use of arcane symbols. There's no reason why things like meta-programming have to look like anything different from plain old programming.

That said, I think Python hits a very attractive middle ground. There is just enough syntax to fit the most basic cultural expectations of technical people as well as a large number of programmers. That, if you think about it, is a stunning achievement in human-interface design. (Read that straight-up!)

(And to be fair: Smalltalk - even more minimal, but ignores lots of important cultural expectations. Lisp - even more minimal and just about everything, no matter how meta, looks like normal Lisp. But on the downside, everything looks like normal Lisp.)

Whatever anyone can say about Python you can't deny how nice it looks on the page.

Very alpha (the lack of anonymous functions is a killer even for experimental use), but it is clean-looking. A project to watch or jump into.

Yuck. I appreciate Python as much as the next guy, but explicit curlies give you way more flexibility in the appearance of your code. Yes, that can be good or bad but so is anything that gives you more power.

Not to mention that in his samples half the curlies were unnecessary.

Seems like you might be better off using the python->JS converted in pyjamas and writing things in straight python:


I wrote a browser one too http://skulpt.org/

I'm not sure if it's better to write in real Python or just know that you're using JS with different syntax ala pyscript. Emulating all the bizarre Python attribute access behaviour in JS (e.g. __get__) is quite complex.

It can be educating to look at the history of Reia (Python/Ruby-like language for Erlang VM). At first its author tried to hard to make Reia indentation sensitive (like Python). Finally he reconsidered after discovering several limitiations: http://www.unlimitednovelty.com/2009/03/indentation-sensitiv...

Hmm, a language interpreted by a parser implemented in a scripting language. Won't that be rather slow? I'd be more comfortable with using it as a compiler that outputs js I can then include, rather than letting clients' browsers interpret it on the fly.

I imagine it does the parse up-front rather than a separate interpretation step during execution.

Granted, but that's still an extra step that I wouldn't want clients to have to take.

A parser implemented in a scripting language

What's a "scripting language"?

Won't that be rather slow?

Firefox is implemented in JavaScript. It's pretty fast, and a little more complicated than a parser.

Firefox is implemented in JavaScript

i'm pretty sure that much of the performance-critical core is in C++; javascript is th UI/extensions layer, to the best of my knowledge

They've been talking for years about written more and lower layers with Javascript. I'm not sure how far along they've got, it would be interesting to know.

Obviously parts are C++ but isn't interfacing with such code one of the defining characteristics of a "scripting language" and javascript in particular?

Vimperator and Conkeror do some pretty complicated manipulation in pure JavaScript. (Sure, the rendering core is in C++, but that's because C++ was all they had when it was first developed.)

What's a "scripting language"?

Or interpreted language, if the nomenclature is that important.

JavaScript in Firefox is compiled to native machine code (if you enable content.jit, that is.)

That's an interesting tidbit. Thanks.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact