| --- Java --- List <Integer> aList = Arrays.asList( new int [] { 1, 3, 5 }); // probably missing some more type stuff in <> Map <String, String> aMap = new HashMap <String, String> (); aMap.put( "name", "Joe"); aMap.put( "ID", "42"); // I need to check if Java 8 has map literals a la Groovy... doSomething( aList, aMap); ... void doSomething( List <Integer> aList, Map <String, String> aMap) { System.out.println( "First: " + aList.get( 0) + ", Name: " + aMap.get( "name") ); } --- Perl --- &do_something( [ 1, 3, 5 ], { 'name' => 'Joe', 'ID' => '42 }); ... sub do_something { my( $list_ref, $hash_ref) = @_; printf "First: %d, Name: %s\n", ${ $list_ref }[ 0 ], ${ $hash_ref }{ 'name' }; } ------ I'm not seeing that much of a difference in parameter passing, other than the explicit reference/dereference syntax. Of course Java doesn't require 500 line methods. But the bondage and discipline imposed is independent of whether or not readable code will be produced. I actually like strongly typed languages for larger programs, but prefer something more fast and loose for smaller ones. TMTOWTDI! |
You can drop the inner array, asList takes variable number of arguments.
> // I need to check if Java 8 has map literals a la Groovy...
Sadly not, IIRC they've backed off from literals towards a Guava style static factory methods, which I'm not thrilled about.
> I'm not seeing that much of a difference in parameter passing, other than the explicit reference/dereference syntax.
So let's say I'm a newbie Perl developer just exploring subs.
It works! Hurrah. Feeling clever, I move onto collections. And it doesn't work at all. @a has some additional values, and %b is undef.So yes, let's use references.
Except now, I have two ways of working with Perl's collections, two separate sets of sigils, and all because I wanted to pass two collections into a function and Perl treats function arguments as a collection, and Perl implicitly flattens collections.The difference I see, as a Perl newbie only working with it out of necessity, is that having (because you need it because of earlier design choices) more than one way of operating on data structures, violates the principle of least surprise.