1. 过程式编程的核心--函数
2. 代码例程
//
// main.m
// Draw Shapes Progress
//
// Created by macsir on 12-10-12.
// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//
#import<Foundation/Foundation.h>
typedefenum {
kCircle,
kRectangle,
kOblateSheroid,
kTriangle
} ShapeType;
typedefenum {
kRedColor,
kGreenColor,
kBlueColor
} ShapeColor;
typedefstruct {
int x, y, width, height;
}ShapeRect;
typedefstruct {
ShapeType type;
ShapeColor fillColor;
ShapeRect bounds;
}Shape;
void drawCircle(ShapeRect bounds,ShapeColor fillColor);
void drawRectangle(ShapeRect bounds,ShapeColor fillColor);
void drawEgg(ShapeRect bounds,ShapeColor fillColor);
void drawTriangle(ShapeRect bounds,ShapeColor fillColor);
void drawShapes (Shape shapes[],int count);
NSString *colorName (ShapeColor colorName);
int main (int argc,constchar * argv[])
{
Shape shapes[4];
ShapeRect rect0 = {0, 0, 10, 30};
shapes[0].type =kCircle;
shapes[0].fillColor =kRedColor;
shapes[0].bounds = rect0;
ShapeRect rect1 = {30, 40, 50, 60};
shapes[1].type =kCircle;
shapes[1].fillColor =kGreenColor;
shapes[1].bounds = rect1;
ShapeRect rect2 = {15, 18, 37, 29};
shapes[2].type =kCircle;
shapes[2].fillColor =kBlueColor;
shapes[2].bounds = rect2;
ShapeRect rect3 = {47, 32,80, 50};
shapes[3].type =kTriangle;
shapes[3].fillColor =kRedColor;
shapes[3].bounds = rect3;
drawShapes(shapes, 4);
// @autoreleasepool {
//
// // insert code here...
// NSLog(@"Hello, World!");
//
// }
return 0;
}
void drawShapes (Shape shapes[],int count)
{
int i;
for(i = 0; i < count; i++) {
switch (shapes[i].type) {
case kCircle:
drawCircle(shapes[i].bounds, shapes[i].fillColor);
break;
case kRectangle:
drawRectangle(shapes[i].bounds, shapes[i].fillColor);
break;
case kOblateSheroid:
drawEgg(shapes[i].bounds, shapes[i].fillColor);
break;
case kTriangle:
drawTriangle(shapes[i].bounds, shapes[i].fillColor);
break;
default:
break;
}
}
}//drawShapes
void drawCircle(ShapeRect bounds,ShapeColor fillColor)
{
NSLog(@"drawing circle at (%d %d %d %d) int %@", bounds.x, bounds.y, bounds.width , bounds.height,colorName(fillColor));
}//drawCircle
void drawRectangle(ShapeRect bounds,ShapeColor fillColor)
{
NSLog(@"drawing circle at (%d %d %d %d) int %@", bounds.x, bounds.y, bounds.width , bounds.height,colorName(fillColor));
}
void drawEgg(ShapeRect bounds,ShapeColor fillColor)
{
NSLog(@"drawing circle at (%d %d %d %d) int %@", bounds.x, bounds.y, bounds.width , bounds.height,colorName(fillColor));
}
void drawTriangle(ShapeRect bounds,ShapeColor fillColor)
{
NSLog(@"drawing triangle at (%d %d %d %d) int %@", bounds.x, bounds.y, bounds.width , bounds.height,colorName(fillColor));
}
NSString *colorName (ShapeColor colorName)
{
switch (colorName) {
case kRedColor:
return @"Red";
break;
casekGreenColor:
return @"Green";
break;
case kBlueColor:
return @"Blue";
break;
default:
break;
}
return@"no clue";
}//colorName
3. 运行结果
2012-10-25 11:54:12.123 Draw Shapes Progress[327:707] drawing circle at (0 0 10 30) int Red
2012-10-25 11:54:12.153 Draw Shapes Progress[327:707] drawing circle at (30 40 50 60) int Green
2012-10-25 11:54:12.158 Draw Shapes Progress[327:707] drawing circle at (15 18 37 29) int Blue
2012-10-25 11:54:12.161 Draw Shapes Progress[327:707] drawing triangle at (47 32 80 50) int Red
4. 说明和总结:
带黑体的是新增绘制一个图形需要添加的代码。这种模式,重点关注的是函数,而不是数据,对于数据比较复杂的程序,着可能造成修改比较麻烦,或者比较浪费资源空间。