学习编程一些思想的视频记录

先上一个观看的视频: https://www.bilibili.com/video/av8117759

1,函数式,面向过程,面向对象。以lua为例子

按照作者的视频的观点,函数式:以闭包为主要操作的语言。

1,函数式:

1,闭包-函数式语言的特征
1.1函数的副作用

exp1:交换2个参数的值。
有副作用:改变了函数参数的值。function f1(x,y){tmp =x, x=y,y=tmp,return x,y }
没有副作用:不会改变函数参数的值。function f1(x,y){x1=y,y1=x,return x1,y1 }
1.2闭包,没有副作用的函数。
exp1:
function f1(x){//参数x默认会当成局部变量传递。
  function f2(y) return x + y ;
  return f2;
}
tmp_f2 = f1(10)
tmp_f2(20)
结果为:30
在这里,x的值看似是自由改变的,其实x是被限定死的。
类似的如:
function f1(){
  local i = 0//如果i不加local,那tmp_f2与其他tmp_f共享这个i,且每次调用f1()时,i的值会执行=0.
  return function (){ return i=i+1; }
}
tmp_f2 = f1()
tmp_f2()
每次调用,返回值依次+1,即:返回值为:1,2,3,4,5。


2,面向过程
面向过程
a1 = {1,2}
a2 = {2,3}
a3 = add(a1,a2)
3,面向对象
//类
function ClassA(a,b){
  local x = a
  local y = b
  function add(objTmp){
    x = x+objTmp.getX()
    y = y+objTmp.getY()
    return x , y
  }
  function getX(){
    return x
  }
  function setX(valueX){
    x = valueX
  }
  return add,getX,setX //返回一个表
}
//继承
function ClassA_child(a,b){
  local A_obj = ClassA(a,b)
  function mul(objTmp){
    A_obj.setX(A_obj.getX()*objTmp.getX())
  }
  return A_obj.add,A_obj.getX,A_obj.setX,mul //返回一个表
}
面向对象数据操作:
a1 = ClassA(1,2)
a2 = ClassA(2,3)
a3 = a1.add(a2)
面向过程数据操作:

a1 = {1,2}
a2 = {2,3}
a3 = add(a1,a2)

作者举了知乎上一个例子:形容狗吃屎。
面向对象是:gou.chi(shi)
面向过程:chi(gou,shi)






写lua时暂时记录的Tips:

tips1:
a={1,2}
b=a
a和b是2个互不相干的表。
tips2:
lua的self和t是2个表,有不同的地址和数据。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值