• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

1000 characters

 
pie sneak
Posts: 4727
Mac VI Editor Ruby
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I need a test String with 1000 characters. I'm lazy and want to build it off of a String of '0123456789'.

What's the best way? The code should be easy to read and modify and it should be fast.

Here's a few different ideas to start with. Can you come up with others?

We can discuss which ones we like best and then time them head to head.



 
Ranch Hand
Posts: 1296
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I got one...

+1 because it's easy to read

-5 because it's not in Groovy


[ September 22, 2008: Message edited by: Garrett Rowe ]
 
Garrett Rowe
Ranch Hand
Posts: 1296
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
This is valid Groovy though (I think):
 
Rancher
Posts: 110
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
How about this?



the * operator is overloaded to repeat the String.
[ September 22, 2008: Message edited by: Matthew Taylor ]
 
Marc Peabody
pie sneak
Posts: 4727
Mac VI Editor Ruby
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Oh. My.

That rocks!
 
author
Posts: 14112
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Originally posted by Matthew Taylor:
How about this?



the * operator is overloaded to repeat the String.



Am I the only one who thinks that this is just wrong...?
 
Rancher
Posts: 43081
77
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Am I the only one who thinks that this is just wrong...?


Probably not :-) But the idea isn't new - in Perl it would be
 
Garrett Rowe
Ranch Hand
Posts: 1296
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Am I the only one who thinks that this is just wrong...?



Works the same way in Scala also. In Scala it's just a plain ol' method call so it shows up in the regular scaladocs. I don't have a problem with it.
 
Garrett Rowe
Ranch Hand
Posts: 1296
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
What about it gives you pause?
 
Master Rancher
Posts: 4796
72
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Works the same in Ruby too.

It also makes sense in that

    "foo" * 3

is the same as

    "foo" + "foo" + "foo"

As long as the + operator has been overloaded, this overloading of * seems consistent.

However in all these languages, 3 * "foo" results in an error. So * is not symmetric when applied between numbers and strings. Then again, + isn't symmetric either:

    "a" + "b"

is not the same as

    "b" + "a"

And furthermore

    "foo" + 1 + 2

evaluates differently then

    1 + 2 + "foo"

- even in Java.
[ September 24, 2008: Message edited by: Mike Simmons ]
 
Matthew Taylor
Rancher
Posts: 110
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
In Groovy, this is done with operator overloading. Meaning that I can write my own class that can overload the '*' operator. For example...



I have provided two multiply() method implementations that overloads the '*' operator. When Groovy sees a '*' in the code, it looks for a method on the preceeding object called 'multiply'. In many cases, this is Number, so the Number.multiply(Number operand) method is called. If it is not a Number, but a Cat, Groovy will still find the right multiply method if you have provided it.
 
Marc Peabody
pie sneak
Posts: 4727
Mac VI Editor Ruby
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
A slight variation:

Which now lets me easily create an army of waaaar kittens!

I have an army of 1000 all named Destroyer
 
Garrett Rowe
Ranch Hand
Posts: 1296
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Does the Groovy syntax of:

multiply => *

extend to other symbols:

divide => /
subtract => -
add => +
etc...

Are there any non-math related symbols that can be defined by this convention?
[ September 25, 2008: Message edited by: Garrett Rowe ]
 
Matthew Taylor
Rancher
Posts: 110
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Originally posted by Garrett Rowe:
Does the Groovy syntax of:

multiply => *

extend to other symbols:

divide => /
subtract => -
add => +
etc...

Are there any non-math related symbols that can be defined by this convention?

[ September 25, 2008: Message edited by: Garrett Rowe ]



Yes. Take a look at the Groovy JDK for List.

The subscript operator []:
myList[0] <====> myList.getAt(0)
myList[1..2] <====> myList.getAt(1..2)
myList[0] = 2 <====> myList.putAt(0, 2)
etc... (there are many more overloaded putAt() methods)

Leftshift <<:
myList << 4 <====> myList.leftShift(4)

Minus -:
myList - 3 <=====> myList.minus(3)

This is just an one example.

Here is the full list of operators supported by Groovy and the methods they map go:

[ September 26, 2008: Message edited by: Matthew Taylor ]
 
rubbery bacon. rubbery tiny ad:
a bit of art, as a gift, the permaculture playing cards
https://gardener-gift.com
reply
    Bookmark Topic Watch Topic
  • New Topic