zoukankan      html  css  js  c++  java
  • 函数式编程

    函数式编程

    函数式编程的特点:
    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. ?>



  • 相关阅读:
    【计算机视觉】基于自组织背景减除的运动目标检测算法
    【计算机视觉】背景建模之PBAS
    【计算机视觉】背景建模之PBAS
    【计算机视觉】【并行计算与CUDA开发】GPU硬解码---DXVA
    【计算机视觉】【并行计算与CUDA开发】GPU硬解码---DXVA
    【计算机视觉】【并行计算与CUDA开发】GPU硬编码
    【计算机视觉】【并行计算与CUDA开发】GPU硬编码
    【计算机视觉】【并行计算与CUDA开发】GPU硬解码---CUVID
    【计算机视觉】【并行计算与CUDA开发】GPU硬解码---CUVID
    【计算机视觉】【并行计算与CUDA开发】OpenCV中GPU模块使用
  • 原文地址:https://www.cnblogs.com/kinmos/p/6829740.html
Copyright © 2011-2022 走看看