|
It is simpler and I actually use pretty much exactly the same code when it is that simple. When you have more than a page of lines within that loop a sudden exit is not what I would do. And a sudden conditional exit with break or return might be even ok. Putting the i to the max and then exit in that manner is something I would never do.
modified 20-Oct-19 21:02pm.
|
|
|
|
|
well to each their own. probably it also has to do with my C++ background which influences a lot of my code. Not that C++ has different flow constructs, it's just that
a) i learned these habits a long time ago and the industry changes
b) C++ development is a different animal, and control flow is all over the place generally and for loops are used for almost everything except while(true) although some people go for(;;). It's not uncommon even to do stuff like for(current=firstNode;null!=current;current=current.nextNode) if(current->key==key) break; to traverse a linked list for example.
When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.
|
|
|
|
|
A purist should be worried about touching control variables. Hmmm.
Jordan
|
|
|
|
|
break is (of course) superfluous - but why not try something that suggests the intention of your loop?
for(int i = 0;i<arr.Length && arr[i]!=valueToFind;i++)
{
}
... or (because I don't like "empty" constructs) ...
int i = 0;
while (i<arr.Length && arr[i]!=valueToFind)
i++;
|
|
|
|
|
I fixed your mistake, you didn't put some space after semi-colons in the for statement.
Book[] arr = books;
for(int i = 0; i<arr.Length; i++)
{
int books_index = i;
Book book = arr[books_index];
if(book.name == find_book) {
return books_index;
}
else if(book.name != find_book) {
continue;
}
else {
found_flag = false;
}
}
|
|
|
|
|
Why not? What is the net value gain by the alternative you show?
|
|
|
|
|
there is none
When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.
|
|
|
|
|
Those two code snippets don't do the same thing. The first doesn't change arr, the second does.
|
|
|
|
|
How does it do that?
If it does, it is a bug
When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.
|
|
|
|
|
Purist? Baaah!
Think of this in terms of far-Eastern philosophy, to wit, Yin/Yang[^].
Always the spot of yin in the yang portion, the spot of yang in the yin portion. Neither can exist without the other.
So, continue to use break as they help you goto a better place.
Ravings en masse^ |
---|
"The difference between genius and stupidity is that genius has its limits." - Albert Einstein | "If you are searching for perfection in others, then you seek disappointment. If you seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010 |
|
|
|
|
|
Prince Wang's programmer was coding software. His fingers danced upon the keyboard. The program compiled without and error message, and the program ran like a gentle wind.
"Excellent!" the Prince exclaimed. "Your technique is faultless!"
"Technique?" said the programmer, turning from his terminal, "What I follow is Tao -- beyond all techniques! When I first began to program, I would see before me the whole problem in one mass. After three years, I no longer saw this mass. Instead, I used subroutines. But now I see nothing. My whole being exists in a formless void. My senses are idle. My spirit, free to work without a plan, follows its own instinct. In short, my program writes itself. True, sometimes there are difficult problems. I see them coming, I slow down, I watch silently. Then I change a single line of code and the difficulties vanish like puffs of idle smoke. I then compile the program. I sit still and let the joy of the work fill my being. I close my eyes for a moment and then log off."
Prince Wang said, "Would that all of my programmers were as wise!"
- The Tao of Programming
When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.
|
|
|
|
|
Because neither one of these loops does anything except waste time.
Was there perhaps a reason you wanted to find out if valueToFind was in arr ? If there was, the first loop is almost right, i points to the matching entry on loop exit. Only problem is, i goes out of scope on loop exit. Sigh. The second loop always has i== arr.Length on loop exit, and i still goes out of scope
|
|
|
|
|
the code to do something is supposed to go in the loop body. i omitted it for the example. sorry i wasn't more clear.
When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.
|
|
|
|
|
only use Goto if you like spaghetti code
|
|
|
|
|
i use gotos for generated state machine code so the code will look exactly like the graphs generated by graphviz. it makes the code more understandable.
like this snippet, implementing q1 of the graph:
q1:
if((pc.Current>='0'&& pc.Current<='9')||
(pc.Current>='A'&& pc.Current<='Z')||
(pc.Current=='_')||
(pc.Current>='a'&& pc.Current<='z')) {
sb.Append((char)pc.Current);
pc.Advance();
goto q1;
}
return new System.Collections.Generic.KeyValuePair<System.String,string>("id",sb.ToString());
from (A Regular Expression Engine in C#[^])
there's supposed to be a picture at the link but it's no longer showing up for me. maybe it will for you.
in any case, there's a time and a place for everything.
When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.
|
|
|
|
|
If you can keep it that ordered then that is good. The problem with the convenience of goto is that it tends to end up being over-used and that is what leads to problems.
|
|
|
|
|
yeah, i use gotos pretty much in generated code. in this case, it just happened to make the code clearer, but state machines are kind of their own animal. It's really hard to implement one using "proper" looping techniques. At best you have a while(true) loop with a giant switch case in it. =(
When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.
|
|
|
|
|
Define purist?
Because using C the way it was designed to be used in more pure.
|
|
|
|
|
I know it, but it still strikes me as unreadable.
It's like a frankenstein of a language that wants to be C# but is like 1/3 c++/stl in how its interfaces look.
plus source level templates - cool sort of, but another cppism.
I find it actually easier to read and port between C# and c++ despite them being so different, because they're at least consistent about their differences. To the point where you can often do editor find replace (-> to . for example) to do a lot of the work for you. The point is, it's a lot more regular. All size() becomes Count. The iterators are pointers, they don't have a bunch of weird methods on them in C++.
It's just straightforward. Reading, writing, porting and thinking in java is creaky or clunky, IMO.
I can't even put my finger on all of it. I just don't like it.
When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.
|
|
|
|
|
Java should have been originally named Jawavawavaa.Jawaavaava().
For the kind of verboseness it carries within.
|
|
|
|
|
i think that's a big part of what i don't like about it.
When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.
|
|
|
|
|
Actually Java was first and C# tried to be Java (which it luckily isn't)
Of course C# only fixed the multi-platform stuff with .NET Core, about 15 years later.
I don't like Java either though.
|
|
|
|
|
i know it was first. what i mean is Java tried to be C# and missed. Microsoft was the one who delivered on managed code.
Microsoft may have waited 15 years, but open sourcers didn't. See Mono and others. .NET has been running on linux systems for quite awhile - since the .NET 1.x days.
When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.
|
|
|
|
|
Second runner up advantage. Microsoft has turned it into a sport of sorts.
Problem was just that in phones they were third. That's not good enough.
|
|
|
|
|
#trueFacts
When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.
|
|
|
|