初學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中還有一個好處就是,回調函數和工具函數寫在了一塊兒。這樣代碼很是緊湊。

相關文章
相關標籤/搜索