System.out.println("Hello World!")

So I’ve been getting used to a couple new languages lately, mostly Ruby and Java but also Python and C++ for comparison. Coming from PHP, VBScript and JavaScript has confused the hell out of me.

The hardest part so far is not strict types, which I expected would mess me up. It’s block-level scope. For example, in PHP you could:

if ( $_GET['name'] ) {  
    $name = $_GET['name'];
} else {
    $name = "World";
echo "Hello $name!";  

But in C++ and Java, variables defined within *any* block (section wrapped in {}), are only visible in that block and its descendant blocks, so when I tried

class HelloWorld
{ public static void main ( String[] args ) { if ( args.length > 0 ) { String name = args[0]; } else { String name = "World"; } System.out.println("Hello "+name+"!"); } }

it wouldn’t compile, saying “name cannot be resolved.” It took me a while to figure this one out.

Fortunately I had some help from a friend but honestly it still seems counter-intuitive to need to declare a value before copying a fixed value. For the record, here’s a version of the last class that works:

class HelloWorld
{ public static void main ( String[] args ) { String name; if ( args.length > 0 ) { name = args[0]; } else { name = "World"; } System.out.println("Hello "+name+"!"); } } ```