初学javaScript-js函数和c函数的比较。

    最近,前端异常的火爆,我觉得有以下原因,第一,由于微信开发非常的火,第二,用H5开发一套代码可以运行到ios/andriod两个平台,节省开发成本。第三,开发效率高,我觉得这主要是因为js这门语言的超强的灵活性。

    在实际的开发中我们经常需要对逻辑进行分层,比如,工具层-业务层,工具层:是高內聚低耦合的实现单一功能的一个一些类库。业务层:负责调用工具层的一些方法处理具体的业务逻辑。下面我们通过一个例子,在C中如何实现?

工具层:负责不同的数值计算,返回计算结果

#pragma 负责具体的计算
int plus(int a, int b){
    return a + b;
}

int minus(int a, int b){
    return  a - b;
}

int multiplication(int a, int b){
    return a * b;
}

业务层:负责处理具体的业务逻辑,这么做的好处是,业务层不用关系,具体的计算是如何实现的,仅仅只是调用就好。

你可以这样写:方式一

int main(int argc, const char * argv[]) {
    
    // 计算加
    int (*p1)(int,int) = plus;
    NSLog(@" plus = %d",calculate(p1, 5, 3));
    // 减
    int (*p2)(int,int) = minus;
    NSLog(@" minus = %d",calculate(p2, 5, 3));
    // 乘
    int (*p3)(int,int) = multiplication;
    NSLog(@" mulplication = %d",calculate(p3, 5, 3));

    return 0;
}

当然你还可以这样写:方式二

int main(int argc, const char * argv[]) {
    // 计算加
    NSLog(@" plus = %d",calculate1(PLUS, 5, 3).res);
    // 计算减
    NSLog(@" minus = %d",calculate1(MINUS, 5, 3).res);
    // 计算乘
    NSLog(@" mulplication = %d",calculate1(MULPLICATION, 5, 3).res);

    return 0;
}

你看到这里可能就要问了,你这mian里边的calculate,calculate都是什么玩意儿。不要着急。在C中,你想要实现函数的分层,你就要写一些,回调函数了。

对应main方式一:

int calculate(int (*p)(int,int), int a, int b){
    // 回调
    return  p(a,b);
}
// 这里传过来函数指针一个回调,然后利用回调调用工具层的方法。

对应main方式二:

typedef enum : NSUInteger {
    PLUS = 0,
    MINUS,
    MULPLICATION,
} Calculate;

typedef struct {
    int (*p)(int,int);
    int res;
}CLASS;
// 在这里处理,具体进行哪些运算,业务层只需要告诉我,计算的类型和计算的数字即可
CLASS calculate1(Calculate type,int a,int b){
    switch (type) {
        case PLUS:
        {
            CLASS c;
            c.p = plus;
            c.res = plus(a,b);
            return c;
        }
            break;
        case MINUS:
        {
            CLASS c;
            c.p = minus;
            c.res = minus(a,b);
            return c;
        }
            break;
        case MULPLICATION:
        {
            CLASS c;
            c.p = multiplication;
            c.res = multiplication(a, b);
            return c;
        }
            break;
    }
}

完整的代码:在GitHub上面 https://github.com/meidong163/js-C-    其实这里用到了一种设计模式:简单工厂模式,关于更多的设计模式,请参看,https://github.com/huang303513/Design-Pattern-For-iOS  ,这哥们用OC写的,写的很好

js中,那就太让人兴奋了

<script type="text/javascript">

	function calculate(way) {	
		if ( way == '+' ) return function mins(a,b) {// 工具层 +
				return a - b
		}
			else if (way == '-') return function plus(a,b) {
				return a + b 
			}
				else if (way == '*') return function mulplication(a,b) {
					 return a * b
				}
		return way
	}
	// 业务层
	alert( calculate('+')(5 ,3) )
	alert( calculate('-')(5, 3) )
	alert( calculate('*')(5, 3) )

</script>

js中,代码少了很多。

js中,函数可以作为返回值,函数中可以定义函数,c不行,c中最多可以把函数指针当作参数,函数指针不能直接作为返回值,但可以放在结构体中作为返回值。js中还有一个好处就是,回调函数和工具函数写在了一起。这样代码非常紧凑。

 

转载于:https://my.oschina.net/u/2494694/blog/680130

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值