Straw Poll: Return True or False?
-
Here's a philosophical question: If you have a function that is meant to delete an item from a collection and the item you wish to delete doesn't exist, do you: 1. Return TRUE since the final outcome (not having that item) has been fulfilled, or 5. Return FALSE because since the function couldn't find the item, it couldn't actually delete it. Vote now.
cheers, Chris Maunder
CodeProject.com : C++ MVP
The 9 things Microsoft should be announcing at MIX07 (but won't)
The function should return FALSE. Choosing to return a boolean value from such a function implies the fact that I use exceptions to handle errors. Otherwise, it would be a bad design decision to return a simple boolean value. The function outcome is expected to be this: The value is certainly removed after a call has been made. The return value tells me a nuance of how the operation has been executed - TRUE if the value was actually removed, FALSE if there wasn't anything to remove - and I may or may not use this extra information in my code. However, the return value is not there for error handling. If anything doesn't go according to the expected operating mode - For example the value to be removed has a state that doesn't allow removal - I will throw an exception. If I can't use exceptions then the return value should be an integer with return types documented. For example, I can use 0 for success and anything else for various error codes. This is the model widely used in Win32 APIs. HTH, Bogdan P.S: I'm glad to see this kind of questions are being asked.
-
Here's a philosophical question: If you have a function that is meant to delete an item from a collection and the item you wish to delete doesn't exist, do you: 1. Return TRUE since the final outcome (not having that item) has been fulfilled, or 5. Return FALSE because since the function couldn't find the item, it couldn't actually delete it. Vote now.
cheers, Chris Maunder
CodeProject.com : C++ MVP
The 9 things Microsoft should be announcing at MIX07 (but won't)
I wish I had a sense of Humor, I could join in the fun then. But I would tend to agree that Logically:- the function returns a value True or False therefore if there is no data to be deleted, you must return False, the data does not exist therefore cannot be deleted so the operation has not been completed. Clearly you NEED to know the operation has been completed, otherwise you would have written the function with a null return value, therefore if there is no data to delete there is a logical error which needs to be flagged and acted on as appropriate. as mentioned by another responder it may be a case of a missing database or some one not doing thier job properly and in need of being fired. Philosophically:- there is inssufficient information to answer the question, IE does it matter what the return value is? The question can of course be compared with that of "what is the sound of one hand clapping" Clearly there is insufficient information to correctly answer the question, no indication is given as to what the one hand is clapping against and the form (shape) of the hand at impact. for example if the hand was clapping against a smooth concrete surface and the hand was flat the result would be a slapping sound with an instant decay. If the hand was cupped then the sound would be more of a muffled thud. if however the hand was clapping against a large Bell, ( as the bell clapper would do) the resultant sound would be accompanied by a ringing note with a more prolonged decay. bet you are glad you asked now! Woz_a
-
Here's a philosophical question: If you have a function that is meant to delete an item from a collection and the item you wish to delete doesn't exist, do you: 1. Return TRUE since the final outcome (not having that item) has been fulfilled, or 5. Return FALSE because since the function couldn't find the item, it couldn't actually delete it. Vote now.
cheers, Chris Maunder
CodeProject.com : C++ MVP
The 9 things Microsoft should be announcing at MIX07 (but won't)
-
Here's a philosophical question: If you have a function that is meant to delete an item from a collection and the item you wish to delete doesn't exist, do you: 1. Return TRUE since the final outcome (not having that item) has been fulfilled, or 5. Return FALSE because since the function couldn't find the item, it couldn't actually delete it. Vote now.
cheers, Chris Maunder
CodeProject.com : C++ MVP
The 9 things Microsoft should be announcing at MIX07 (but won't)
I would vote the little known third option,
TRALSE
, since this was neither TRUE nor FALSE and it might be nice to know the true outcome here...:-D
CleaKO
"I think you'll be okay here, they have a thin candy shell. 'Surprised you didn't know that.'" - Tommy (Tommy Boy)
"Fill it up again! Fill it up again! Once it hits your lips, it's so good!" - Frank the Tank (Old School) -
That's a bit of a large hammer to weild. What if you vaguely expect an item to be there but another process has removed it just before you do. Is an exception a good idea, considering that in the end it's not so much an error, but more of a "oh well" thing.
throw new NotThereShrugException();
cheers, Chris Maunder
CodeProject.com : C++ MVP
The 9 things Microsoft should be announcing at MIX07 (but won't)
Chris Maunder wrote:
That's a bit of a large hammer to weild.
Not really. It encourages people to (properly) use the .Contains() method before calling the .Delete() method. Or in the case of file I/O, you would use the File.Exists() static method before firing off a .Delete().
Grim
(aka Toby)
MCDBA, MCSD, MCP+SB
SELECT * FROM users WHERE clue IS NOT NULL GO
(0 row(s) affected)
-
Chris Maunder wrote:
That's a bit of a large hammer to weild.
Not really. It encourages people to (properly) use the .Contains() method before calling the .Delete() method. Or in the case of file I/O, you would use the File.Exists() static method before firing off a .Delete().
Grim
(aka Toby)
MCDBA, MCSD, MCP+SB
SELECT * FROM users WHERE clue IS NOT NULL GO
(0 row(s) affected)
But what if your collection is actually a database? (I wasn't referring, literally, to a .NET collection)
cheers, Chris Maunder
CodeProject.com : C++ MVP
The 9 things Microsoft should be announcing at MIX07 (but won't)
-
If it failed it should throw an exception. Maybe you want a
TryDelete
? -
Here's a philosophical question: If you have a function that is meant to delete an item from a collection and the item you wish to delete doesn't exist, do you: 1. Return TRUE since the final outcome (not having that item) has been fulfilled, or 5. Return FALSE because since the function couldn't find the item, it couldn't actually delete it. Vote now.
cheers, Chris Maunder
CodeProject.com : C++ MVP
The 9 things Microsoft should be announcing at MIX07 (but won't)
Test for existance first, then attempt delete.
-
That's right, the question didn't indicate that the method did anything more complex. And, if it did, it's possible an enum would be required if a return value was needed to indicate what occured.
Christian Graus - Microsoft MVP - C++ Metal Musings - Rex and my new metal blog "I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
:-D If I have to choose from them,I would choose FALSE. But I would like to design that function to return how many it would have deleted items. And if exception error would happen,that function would return negative number. Because to have more infomation makes that function more useful. But to make that function more useful makes programer more distressful.
-
Test for existance first, then attempt delete.
That's inefficient, the delete will do the check for existence (a second time).
-
But what if your collection is actually a database? (I wasn't referring, literally, to a .NET collection)
cheers, Chris Maunder
CodeProject.com : C++ MVP
The 9 things Microsoft should be announcing at MIX07 (but won't)
Chris Maunder wrote:
But what if your collection is actually a database?
Follow the already well-established database model and return an integer representing the number of rows affected. Because with a database, it's just as important to know that you deleted 150 rows as it would be to know that you didn't delete any. (More important, IMHO.)
Grim
(aka Toby)
MCDBA, MCSD, MCP+SB
SELECT * FROM users WHERE clue IS NOT NULL GO
(0 row(s) affected)
-
I would vote the little known third option,
TRALSE
, since this was neither TRUE nor FALSE and it might be nice to know the true outcome here...:-D
CleaKO
"I think you'll be okay here, they have a thin candy shell. 'Surprised you didn't know that.'" - Tommy (Tommy Boy)
"Fill it up again! Fill it up again! Once it hits your lips, it's so good!" - Frank the Tank (Old School)At times I use an enum;
{ Good , Bad , Ugly }
-
Here's a philosophical question: If you have a function that is meant to delete an item from a collection and the item you wish to delete doesn't exist, do you: 1. Return TRUE since the final outcome (not having that item) has been fulfilled, or 5. Return FALSE because since the function couldn't find the item, it couldn't actually delete it. Vote now.
cheers, Chris Maunder
CodeProject.com : C++ MVP
The 9 things Microsoft should be announcing at MIX07 (but won't)
I'm thinking enums: eLookHereMateYourAskingMeToDeleteSomethingThatJustDoNotExistYouTwit eYouCallThatAnIndexIveSeenBetterIndicesOnAFisherPriceCalculatorYouTwit eItsLockedAskMeLaterYouTwit eRaviAteItYouTwit eDeleteThisYouTwit eOKYouTwit Pretty much covers the most likely scenarios, and makes the error log a little more interetsing. A more difficult case can occur if the ham sandwich is deleted after Ravi has eaten half of it, especially if garbage collection is running in promiscuous mode. Then you should use a real programming laguage.
-
This is a trick questions. None of the answers are fully acceptable. The question doesn't leave room for a third option of returning a status code which can take at least 3 values. Then, the answer would be to just return a separate, third value if the element to be deleted wasn't found! In my philosophy classes I was thought there are actually three states of truth: true, false, and undecided.;) The reason we're stuck with just true and false in programming seems to have something to do with the 0 and 1 values of independent bits.
-
That's inefficient, the delete will do the check for existence (a second time).
How so? Psuedo Code if (list.contains(item)) { bool bOK = list.delete(item); //Do something here we bOK if you want } This would skip delete calls to items that no longer exist. The delete just deletes, it doesn't do a check on existance.
-
Here's a philosophical question: If you have a function that is meant to delete an item from a collection and the item you wish to delete doesn't exist, do you: 1. Return TRUE since the final outcome (not having that item) has been fulfilled, or 5. Return FALSE because since the function couldn't find the item, it couldn't actually delete it. Vote now.
cheers, Chris Maunder
CodeProject.com : C++ MVP
The 9 things Microsoft should be announcing at MIX07 (but won't)
Long time lurker, first time commenter... Personally though regardless of how you get there you only want True or False if the function succeeds or fails in deleting the item from the collection. If it doesn't exist it has done neither and you really do need to handle that. It is unlikely that if you carefully created the collection the case of neither happening is highly unlikely but it can, and will, happen. Improper, or worse yet no, error handling is a pox and while it is tedious and annoying the long term benefits to error/exception handling are worth it. If I must pick one though... False, as nothing was deleted. Even in that it should send up a flag somewhere as, presumably, the point is to get rid of the item.
"A foolish consistency is the hobgoblin of little minds, adored by little statesmen and philosophers and divines." - Ralph Waldo Emerson, Essays. First Series. Self-Reliance.
-
The question was: "If you have a function that is meant to delete an item from a collection and the item you wish to delete doesn't exist, do you: 1. Return TRUE since the final outcome (not having that item) has been fulfilled, or" You said you voted '1'. Surely if I call delete, and the item DOES exist, it's going to return true ? And so, if it doesn't exist, it's also going to return true. When will it return false ? I'm not sure I see how removing an item from a list is going to fail, when the item is in there. Or am I missing something ?
Christian Graus - Microsoft MVP - C++ Metal Musings - Rex and my new metal blog "I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
Christian Graus wrote:
Surely if I call delete, and the item DOES exist, it's going to return true ? And so, if it doesn't exist, it's also going to return true. When will it return false ?
You'd return FALSE if it existed and you couldn't delete it! (from a generic sense, anyways.)
Christian Graus wrote:
I'm not sure I see how removing an item from a list is going to fail, when the item is in there.
It could fail if deleting required actually removing some object that was locked as well as a reference in a list, say, a file. I think that in most cases, not finding the item should return TRUE as the concept is likely to be: "Make sure that it doesn't exist". Given all the answers I've read, if you were concerned with a concept of "I was expecting it and if it doesn't exist, there's a problem" then I'd suggest that the return should not be Boolean but an enumerate with values like: I deleted it like you asked I couldn't find it, are you nuts? I couldn't get rid of the blighter Giving your enumerated type values like those above would certainly add some levity to your code!
Life is like a s**t sandwich; the more bread you have, the less s**t you eat.
-
Here's a philosophical question: If you have a function that is meant to delete an item from a collection and the item you wish to delete doesn't exist, do you: 1. Return TRUE since the final outcome (not having that item) has been fulfilled, or 5. Return FALSE because since the function couldn't find the item, it couldn't actually delete it. Vote now.
cheers, Chris Maunder
CodeProject.com : C++ MVP
The 9 things Microsoft should be announcing at MIX07 (but won't)
-
Here's a philosophical question: If you have a function that is meant to delete an item from a collection and the item you wish to delete doesn't exist, do you: 1. Return TRUE since the final outcome (not having that item) has been fulfilled, or 5. Return FALSE because since the function couldn't find the item, it couldn't actually delete it. Vote now.
cheers, Chris Maunder
CodeProject.com : C++ MVP
The 9 things Microsoft should be announcing at MIX07 (but won't)
Return NULL... end of discussion. Heheheheeeeee :laugh:
"Quality Software since 1983!"
http://www.smoothjazzy.com/ - see the "Programming" section for freeware tools and articles. -
Here's a philosophical question: If you have a function that is meant to delete an item from a collection and the item you wish to delete doesn't exist, do you: 1. Return TRUE since the final outcome (not having that item) has been fulfilled, or 5. Return FALSE because since the function couldn't find the item, it couldn't actually delete it. Vote now.
cheers, Chris Maunder
CodeProject.com : C++ MVP
The 9 things Microsoft should be announcing at MIX07 (but won't)