Path: csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!news.albasani.net!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Robert Klemme Newsgroups: comp.lang.java.programmer Subject: Re: StringBuilder Difficulties Date: Sat, 02 Jul 2011 12:58:40 +0200 Lines: 124 Message-ID: <978bv1FnqaU1@mid.individual.net> References: <9744m8FpnhU3@mid.individual.net> <6cqp07tiug2nu8u6ififvvek1694fkpfi1@4ax.com> <976q3jF3etU2@mid.individual.net> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Trace: individual.net FN7fXN16X1clLlJGdIEDwAm2m+AsQdMR00GX4Q8jLF0vRTNOI= Cancel-Lock: sha1:b2Dx34TpFJ9bCPvpfK/N6OhzTAU= User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110516 Lightning/1.0b2 Thunderbird/3.1.10 In-Reply-To: Xref: x330-a1.tempe.blueboxinc.net comp.lang.java.programmer:5821 On 07/02/2011 02:29 AM, Gene Wirchenko wrote: > On 1 Jul 2011 20:47:47 GMT, blmblm@myrealbox.com > wrote: > >> In article<6cqp07tiug2nu8u6ififvvek1694fkpfi1@4ax.com>, >> Gene Wirchenko wrote: >>> On 30 Jun 2011 20:30:00 GMT, blmblm@myrealbox.com >>> wrote: >>> >>> [snip] >>> >>>> A general comment: I'm inclined to agree with the people who are >>>> saying that in general it seems like you're trying to write [name >>>> of your favorite language] programs in Java, and in the long term >>>> that seems less optimal than trying to grok the Java mindset. >>> >>> My mindset is that I want to get my work done. I do not care >>> about the Java mindset except as it helps me get my work done. >> >> Yes, and if you were going to do a lot of programming in Java it >> would seem to make sense to adapt to the local customs, so to speak. >> Not to do so seems to me like fighting with your tools, which, well, >> I do it too sometimes, but it does get in the way of getting stuff >> done. > > My tools include manyyears of experience programming. I do not > think that Java is such a precious snowflake -- the same is true of > any language -- that I should have to throw all that experience away > in order to use the language. As far as I can see nobody asked you to do that. If adjusting to a new language's mindset requires you to throw away everything you've learned so far then you probably better stick with the previous experience and tools. That will be much more efficient and beneficial. If, on the other hand, you want to use a new language then you typically get best results (or results at all) if you adjust to the environment you find. You may have noticed that your issues with StringBuilder seem to be quite unique - others posting here do not seem to have those issues. In my experience this is usually an indication that I am doing something wrong or haven't properly understood the new environment yet. >>>> I think part of it may be struggling with the object-oriented >>>> paradigm, but part of it may just be coming to terms with the fact >>> >>> No, I am experienced with OOP. >> >> Huh. Well, with all due respect .... >> >> I'd have said otherwise given that all of the variables and methods >> in your TimingTesting program (the version I tried revising) seem >> to be static (except the local variables). I'm also puzzled by why >> that program duplicates so much code, when you could have factored >> out the parts that are different using objects-as-code-wrappers. >> But maybe the O-O languages you've used before don't make you do >> that, and adapting to that particular Java idiom seemed not worth >> the trouble. > > Oh, I asked about that. One apparently can not pass a function > pointer parameter as in C. The ways that were posted involved lookup > every time AFIACS and I judged that it might swamp what I was > measuring (checking if a character were in a set). So, to my chagrin, > I had to go with cut-and-paste. The usual solution in Java is to factor out an API into an interface and have several implementations of that interface. See Callable for example - this basically encapsulates a "function" with no arguments and a single return value: http://download.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Callable.html In your TimingTesting program you could define a private interface like this private interface Search { boolean search(char c); } Then you create inner classes private final class SequentialSearch implements Search { @Override boolean search(char c) { for ( int i = 0; i < chars.length(); ++i ) { if (chars.charAt(i) == c) { return true; } } return false; } } public void parseSequentialSearch() { parse(new SequentialSearch()); } private void parse(Search s) { int xScan=0; boolean fBuildingIdent=false; boolean fInIdentChars; String cIdent=""; // fussy init while (xScan