So why is it useful for C programmers to divide their programs intoseparate--but cooperating--functions? Why not write every program as one big``chunk'' of statements?
Think back again to the homework for the previous lesson, in which you foundthe positions of a squatter's joints. In that program you used the built-insine and cosine functions.
Those functions were predefined for you, meaning that you didn't have to tellthe computer how to compute the sine and cosine of an angle. The work ofteaching the computer about sines and cosines had already been done for you.And because that programming job had already been done, you could simply usethose functions in your own program, without worrying about how the sine andcosine functions actually worked inside.
This example highlights the two most important reasons that C programmers usefunctions.
The first reason is reusability. Once a function is defined, it can beused over and over and over again. You can invoke the same function many timesin your program, which saves you work. Imagine what programming would be likeif you had to teach the computer about sines every time you needed tofind the sine of an angle! You'd never get your program finished!
Another aspect of reusability is that a single function can be used in severaldifferent (and separate) programs. When you need to write a new program, youcan go back to your old programs, find the functions you need, and reuse thosefunctions in your new program. You can also reuse functions that somebody elsehas written for you, such as the sine and cosine functions.
The second reason is abstraction. In order to use a particular functionyou need to know the following things:
- The name of the function;
- What the function does;
- What arguments you must give to the function; and
- What kind of result the function returns.
But notice: If you just want to use the function in your program, you don't have to know how it works inside! You don't have to understandanything about what goes on inside the function.
It's sort of like driving a car or using a telephone. With an automobile, youdon't need to understand every detail about the engine and drive train andwheels, if all you want to do is drive the car. Similarly, with a telephone,you don't have to understand everything about the phone system in order to makea call.
The only time you need to know how a function works inside is when youneed to write the function, or change how it works. (It's like a car again;you need to know how a car works in order to build one or fix one.) But once afunction is written and working, you never need to look at its insides again.
Together, these two reasons make functions extremely useful--practicallyessential!-for programmers who write large programs. The ability todivide a program into abstract, reusable pieces is what makes it possible towrite large programs that actually work right.
Hamlet Project
Department of Computer Science
University of Utah