> The art of software development is in taking a problem, breaking it up in to > bite-size chunks, and putting those chunks together to form a practical > solution. Anyone who considers themselves a "better" programmer because their > functions are large due to their ability to handle large functions needs to > keep their ego in check. Mental capacity has nothing to do with it. > > My philosophy for functions is simple... a function does one well-defined, > discrete task, and it does it well. The inputs are clearly specified, and the > potential outputs/exceptions are fully understood. Sound familiar? These > requirements make it incredibly easy to write unit tests for the code. > > The number of times a function is used does not enter my field of interest. > It's irrelevant, as is the number of lines in each function. Following this > philosophy does naturally lead to fairly small functions, but as you move up > the levels of abstraction they tend to grow larger. For PHP, I consider code > in a file that's not within a function to be a function in itself, and the > same philosophy applies. >
Stuart, Your philosophy is interesting. Of course, a function should have one well-defined and discrete task, but it is not always clear what one task is. Let me take an example of a list. For example, you want to write a function that removes an element from a list. In this example, we will only use this list to remove items from it, so the code required here won't be used another time. Now you have a few possibilities: 1) (This one is probably Tony's approach): Write a single function that searches the element and removes it from the list. 2) (My approach): Write a search function first, even though we're not going to use it elsewhere), then write a delete function that uses the search function to find it and remove it. 3) (Crazy approach ;)): Write a function that gets the next element in the list, write a search function that uses the previous one. Write a delete function that uses the search function, and then calls a function that removes the actual element. With your philosophy all three can fit. The other interesting part in this discussion is the limited mental work area. I assume that this is true, supported by the related studies, makes me feel that we should write code as compact as possible, right? - Matijn -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php