函數式編程

函數式編程javascript

函數式編程的特色:
1.函數能夠與其餘數據類型同樣進行傳遞賦值;
2.只用表達式,不用語句,每一步都是單純的運算,並且都有返回值,函數式編程的動機是,爲了處理運算,不考慮系統的讀寫,減小沒必要要的讀寫操做;
3.函數式編程,不能存在函數內部和外部的互動,函數須要保持獨立,不能修改外部變量的值;
4.引用透明,函數運行不依賴外部變量或狀態,只依賴與輸入的參數
 
函數式編程的好處:
代碼簡潔,開發快速
函數式編程大量使用函數,減小代碼的重複,開發速度快;
函數式編程接近天然語言,易於理解  函數式編程的自由度很高,能夠寫出很接近天然語言的代碼;
很方便代碼管理,函數式編程不依賴外界狀態,故而不會對外界數據產生影響,有利於,單元測試和模塊組合;
易於併發編程,不須要考慮死鎖的問題;
代碼的熱升級,函數式編程不會影響其餘;
 
 
 
將函數名進行傳遞 進而進行調用的編程思想
 
在php中,使用$fname() 這樣的思路能夠實現, 也能夠 call_user_func('phpinfo');
 
使用這種方式以前須要先檢測下類中是否有這個函數
  1. <?php
  2. /*
  3. 函數式編程
  4. 在php中,使用$fname() 這樣的思路能夠實現, 也能夠 call_user_func('phpinfo');
  5. */
  6. classHSController{
  7. publicstaticfunction login()
  8. {
  9. echo "login in!!";
  10. }
  11. }
  12. $action=$_GET['action'];
  13. //先要檢車下這個類中是否有這個方法 使用php的反射機制檢查
  14. $reflectionClass=new reflectionClass('HSController');
  15. if(!$reflectionClass->hasMethod($action))//檢查類中是否有該方法
  16. {
  17. echo $action.' is not found!';
  18. exit();
  19. }
  20. //檢查該方法是不是靜態方法
  21. $reflectionMethod=$reflectionClass->getMethod($action);
  22. if(!$reflectionMethod->isStatic())
  23. {
  24. echo $action.' is not a static function!';
  25. exit();
  26. }
  27. HSController::$action();
  28. ?>
 
php中閉包實現函數式編程思想
  1. <?php
  2. /*
  3. lambda表達式
  4. 在php 5.3以前
  5. 是使用 create_function('',);
  6. */
  7. create_function('$a','return addcslashes(trim($a));');
  8. //至關於構造一個下面的函數
  9. function lambda_1($a)
  10. {
  11. return addcslashes(trim($a));
  12. }
  13. //create_function 會建立一個 lambda_數字的一個臨時函數
  14. //在php5.3 php 便開始真正的支持閉包 lambda也就更好用了
  15. $data=range(0,10);
  16. //更接近javascript的lambda語法
  17. $newData=array_map(function($v){
  18. $a=range(0, $v);
  19. return array_sum($a);
  20. }, $data);
  21. function outer()
  22. {
  23. $a=11;
  24. returnfunction()use($a){
  25. //閉包
  26. echo $a;
  27. };
  28. }
  29. $inner=outer();
  30. $inner();
  31. print_r($newData);
  32. ?>
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息