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

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

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

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

#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;
}

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

你能够这样写:方式一git

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;
}

固然你还能够这样写:方式二github

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中还有一个好处就是,回调函数和工具函数写在了一块儿。这样代码很是紧凑。

相关文章
相关标签/搜索