G***l 发帖数: 355 | |
p*****2 发帖数: 21240 | |
G***l 发帖数: 355 | 3 各个语言不同吧。而且跟背景也有关系,完全没接触过的和接触过一些当然不一样。我
真正认真去学fp之前已经简单学过lisp,虽然lisp谈不上是fp language。C#里面
functional的功能也用过很多。
学真是很次要的,这年头谁没学过好几种语言,语法还不是很快就搞定了。主要是要用
,忘记OO的那些东西。
function当作变量,currying,function的组合等等,其实一点也不难不是嘛。很多fp
语言你都可以定义oo那样的class,但是大多时候完全不需要,tuple,union和record的
组合基本够用了,还能pattern matching。no side effect function和immutable稍微
难适应点,不要point.moveUp();point.xxx();这样的用法,而是movedPoint=moveUp(
point);xxx(movedPoint);或者直接把point丢给move up和xxx的组合。再说FP不能或者
不鼓励用循环。其实就算c++,java这样的,best practice也是建议循环体不要太复杂
,不鼓励有多重循环不是吗。因为循环体太复杂的话,完全deserver refactor成一到
多个function。FP只是更进一步而已,比如循环一个list变成要么递归,要么filter,
map,reduce到若干个function的组合。
其实OO拆开了看,不也是一堆function吗。用java来说,static的function就是fp里的
那样,没有状态,除非你用global variable。member function改变一个object的内部
状态后面接着用,在fp里面就是生成一个新的object后面接着用。OO和FP只是重心不一
样,一个围绕data的状态改变,function是用来实现状态改变的。另外一个围绕
function的组合,data是用来实现function之间沟通的。
我不用什么高级很偏门的东西,fp对我最大的好处就是灵活强大的function和
stateless,no side effect。
【在 p*****2 的大作中提到】 : : 大牛说说fp一般需要学习多久吧?
|
z****e 发帖数: 54598 | 4 定义是不难
看起来很痛苦
拿到一个东西
都不知道是func还是var
以前拿到一个返回值
肯定是var,现在不好说
fp
【在 G***l 的大作中提到】 : 各个语言不同吧。而且跟背景也有关系,完全没接触过的和接触过一些当然不一样。我 : 真正认真去学fp之前已经简单学过lisp,虽然lisp谈不上是fp language。C#里面 : functional的功能也用过很多。 : 学真是很次要的,这年头谁没学过好几种语言,语法还不是很快就搞定了。主要是要用 : ,忘记OO的那些东西。 : function当作变量,currying,function的组合等等,其实一点也不难不是嘛。很多fp : 语言你都可以定义oo那样的class,但是大多时候完全不需要,tuple,union和record的 : 组合基本够用了,还能pattern matching。no side effect function和immutable稍微 : 难适应点,不要point.moveUp();point.xxx();这样的用法,而是movedPoint=moveUp( : point);xxx(movedPoint);或者直接把point丢给move up和xxx的组合。再说FP不能或者
|
G***l 发帖数: 355 | 5 你这妄图中学为体,西学为用,行不通的。
你要写fp就要忘记oo把你洗脑的东西。fp里面,func也是一种var。为什么要区分,实
在要区分,用名字不行吗?你拿到一个返回值,你调用的那个function没有定义吗?怎
么不知道返回的是什么。按你这么说,java里可以说看到一个东西,都不是到是string
还是int,拿到一个返回值,不好说是int还是string,我没法用了。
【在 z****e 的大作中提到】 : 定义是不难 : 看起来很痛苦 : 拿到一个东西 : 都不知道是func还是var : 以前拿到一个返回值 : 肯定是var,现在不好说 : : fp
|
z****e 发帖数: 54598 | 6 那这个太抽象
会乱
以前写oop时候
我们都会区分entity和func的class
entity一般就是set/get方法
func的话,其实你可以把他们全部看成是static
但是没有必要,因为static容易导致内存管理上的负荷加大
不利于内存管理,所以有了spring之后
全部都交给spring搞定,比全部都是static顶用
不管怎样,oop掌握起来更容易,也更顺畅
fp就像在解题,oop在列方程
图简单,还是oop了
string
【在 G***l 的大作中提到】 : 你这妄图中学为体,西学为用,行不通的。 : 你要写fp就要忘记oo把你洗脑的东西。fp里面,func也是一种var。为什么要区分,实 : 在要区分,用名字不行吗?你拿到一个返回值,你调用的那个function没有定义吗?怎 : 么不知道返回的是什么。按你这么说,java里可以说看到一个东西,都不是到是string : 还是int,拿到一个返回值,不好说是int还是string,我没法用了。
|
G***l 发帖数: 355 | 7 首先不明白static为什么会内存管理负荷加大,member function在编译后不就是多了
this pointer的function吗?非member不能access class内部只是compiler的限制而已。
上面这个不属于这个话题,回归正题,你说oop掌握起来更容易是因为你先学了oop,若
干年熟练使用oop,当然认为oop容易。一个从没学过编程的和计算机的初学者,去学fp
,那些基本的东西,不会觉得比学oop的object,继承什么的难。至于究竟谁好用,只
能说大多时候一样好用,有的时候肯定是oop好用,有的时候是fp好用。要是fp真不好
用,没人会去用。用fp的不只是硅谷的个别geek。要是fp没用,我是不会闲着没事浪费
自己时间金钱去用的。
【在 z****e 的大作中提到】 : 那这个太抽象 : 会乱 : 以前写oop时候 : 我们都会区分entity和func的class : entity一般就是set/get方法 : func的话,其实你可以把他们全部看成是static : 但是没有必要,因为static容易导致内存管理上的负荷加大 : 不利于内存管理,所以有了spring之后 : 全部都交给spring搞定,比全部都是static顶用 : 不管怎样,oop掌握起来更容易,也更顺畅
|
g*****g 发帖数: 34805 | 8 FP出现比OO早了无数年,到现在仍然不流行,还不说明问题吗?俺小的时候听说世界语
很牛逼,长大了发现真正走世界还是英语靠谱。
已。
fp
【在 G***l 的大作中提到】 : 首先不明白static为什么会内存管理负荷加大,member function在编译后不就是多了 : this pointer的function吗?非member不能access class内部只是compiler的限制而已。 : 上面这个不属于这个话题,回归正题,你说oop掌握起来更容易是因为你先学了oop,若 : 干年熟练使用oop,当然认为oop容易。一个从没学过编程的和计算机的初学者,去学fp : ,那些基本的东西,不会觉得比学oop的object,继承什么的难。至于究竟谁好用,只 : 能说大多时候一样好用,有的时候肯定是oop好用,有的时候是fp好用。要是fp真不好 : 用,没人会去用。用fp的不只是硅谷的个别geek。要是fp没用,我是不会闲着没事浪费 : 自己时间金钱去用的。
|
G***l 发帖数: 355 | 9 逻辑在哪里?因为FP比OO早且直到现在也没有OO流行,所以FP以后也不会流行?
过去FP没有流行的限制现在已经少了很多,更强大的compiler和ide,性能过剩的硬件
,FP的一部分缺点可以忽略了,人们又需要他的优点,所以就开始流行了,就是这么简
单。
【在 g*****g 的大作中提到】 : FP出现比OO早了无数年,到现在仍然不流行,还不说明问题吗?俺小的时候听说世界语 : 很牛逼,长大了发现真正走世界还是英语靠谱。 : : 已。 : fp
|
z****e 发帖数: 54598 | 10 fp在一般的oo level属于没事找事,绝大多数人不需要用到fp做的事
真正需要fp的人,又面临着实际经验不足的问题
显得很空中楼阁,最后就看一堆人在扯蛋,鸡同鸭讲
现在说的fp主要是说scala而不是lisp,haskell
虽然有fp,但是scala跑在jvm上,这差距太大了
什么东西都太理想了,往往会摔得很惨
【在 G***l 的大作中提到】 : 逻辑在哪里?因为FP比OO早且直到现在也没有OO流行,所以FP以后也不会流行? : 过去FP没有流行的限制现在已经少了很多,更强大的compiler和ide,性能过剩的硬件 : ,FP的一部分缺点可以忽略了,人们又需要他的优点,所以就开始流行了,就是这么简 : 单。
|
|
|
G***l 发帖数: 355 | 11 fp在oo level上面,除了最简单的比如lambda,first class function这些功能比较有
用之外其他确实是没事找事。反过来,oo的继承,多态什么的在fp level上也是没事找
事。
至于人需不需要用fp不是你我说了算的。牛如盖茨还说过超过640k以上的内存很多余呢
。从以前在工业界无人问津,到现在用的人越来越多。还是很能说明问题的。哪怕是传
统的oo语言,c++,c#,java都在近几年或多或少的加入一些基本的fp支持。他们的委员
会都脑抽了?水平和眼光还如不这个版上的人强?
【在 z****e 的大作中提到】 : fp在一般的oo level属于没事找事,绝大多数人不需要用到fp做的事 : 真正需要fp的人,又面临着实际经验不足的问题 : 显得很空中楼阁,最后就看一堆人在扯蛋,鸡同鸭讲 : 现在说的fp主要是说scala而不是lisp,haskell : 虽然有fp,但是scala跑在jvm上,这差距太大了 : 什么东西都太理想了,往往会摔得很惨
|
p**r 发帖数: 5853 | 12 如果大多数人都对FP都认同,那就不是FP了。
毕竟大部分人都是都为了单位时间内的最大收益,
看看job版,多少人要转行当码农就知道了,
那些人对CS都没什么passion可言,什么赚钱干什么。
一些比较深入的,基本面的东西,永远不会火的,也没必要火。
有那么几个人可以搞,然后慢慢衍生出傻瓜级工具,产品就可以了。
我们人类今天的文明,关键也就靠那么几个人,
大家都搞理论研究,都搞基础科学,
那还让上帝文明怎么混。
【在 G***l 的大作中提到】 : http://www.mitbbs.com/article/Programming/31239847_0.html : http://www.mitbbs.com/article/Programming/31273667_0.html : 那时候大多人都对fp很不屑,认为是小p孩的玩具之类的,呵呵。现在好像火了不少, : 是因为@peking2的明星效应嘛?
|
z****e 发帖数: 54598 | 13
这两个oo自身也用得越来越少,最常用的还是封装
fp最常用的也是lambda和部分1st class citizen,把方法作为参数传入还是常用的
但是作为值返回,那这个就相对少用
不管哪种p,越简单的部分越常用
是学术界的左逼喜欢,现在不就是做点桥梁让学术界左逼们也能参与社会劳动和分工么?
qxc早就说过,喜欢搞scala的往往有学术背景,其实python也是
左逼们没有多少实际动手经验,全凭自己想象,喜欢指手画脚
那肯定不能全听左逼的,只能说有取有舍,部分接受,java就是部分接受
这个态度是正确的,至于这个算不算是fp,是fp还是部分是fp还是不是fp,那看你自身
定义了
另外我感觉,嘴巴上说fp的大部分时间都在装逼
真正有实战经验的,往往对fp持有一种批判的态度
倒是连ide都不会用的,说白了就是没怎么认真写过软件的
往往很喜欢拿fp这种东西来装逼,小样,你看爷我会fp诶
你丫弱智,用个ide算啥?你问问你们大学教授会用eclipse不?
就这态度,这种人不少
【在 G***l 的大作中提到】 : fp在oo level上面,除了最简单的比如lambda,first class function这些功能比较有 : 用之外其他确实是没事找事。反过来,oo的继承,多态什么的在fp level上也是没事找 : 事。 : 至于人需不需要用fp不是你我说了算的。牛如盖茨还说过超过640k以上的内存很多余呢 : 。从以前在工业界无人问津,到现在用的人越来越多。还是很能说明问题的。哪怕是传 : 统的oo语言,c++,c#,java都在近几年或多或少的加入一些基本的fp支持。他们的委员 : 会都脑抽了?水平和眼光还如不这个版上的人强?
|
g*****g 发帖数: 34805 | 14 fp不只是慢而已,不符合人对世界的建模呀。把世界看成matrix的是很少的人。到现在
也不过在并发类库上有所建树而已。写类库和写应用是两码事。就如spark是Scala写的
,不妨碍Java去调用。
【在 G***l 的大作中提到】 : 逻辑在哪里?因为FP比OO早且直到现在也没有OO流行,所以FP以后也不会流行? : 过去FP没有流行的限制现在已经少了很多,更强大的compiler和ide,性能过剩的硬件 : ,FP的一部分缺点可以忽略了,人们又需要他的优点,所以就开始流行了,就是这么简 : 单。
|
G***l 发帖数: 355 | 15 呵呵,不是不符合人对世界的建模,而是不符合你的建模而已。因为你已经习惯oo了。
你这么说就像一个吃甜豆花的说咸豆花反人类,没见过世面的白人说鸡爪和皮蛋恶心一
样,自己觉得无比正确,自己的圈子里也有很多人认同你,但其实只是知识和经验的不
够全面所导致的狭隘观点而已。
再说,没有任何程序要对世界建模,只是对特定的problem建模而已。那个特定的
problem不见得oo就合适。比如就算是一个很大的problem,也能分解成若干小的模块,
有的模块用java合适有的用scala合适。
另外,对problem建模完全不是照办这个problem在现实世界的理解而简单映射到程序上
去。不然software engineer这个title也太侮辱engineer这个词了。engineer在解决一
个问题的时候,需要对原本的问题进行合理的转化,而不是简单的照搬。没有洗衣机的
时候人们是用手搓洗衣服,或者在搓衣板上搓洗衣服。如果按照最符合人对世界建模的
观点的话,洗衣机应该设计成一个机械手抓住衣服搓洗。哈哈,幸好设计洗衣机的人没
那么二。
【在 g*****g 的大作中提到】 : fp不只是慢而已,不符合人对世界的建模呀。把世界看成matrix的是很少的人。到现在 : 也不过在并发类库上有所建树而已。写类库和写应用是两码事。就如spark是Scala写的 : ,不妨碍Java去调用。
|
g*****g 发帖数: 34805 | 16 描述这个世界的学科叫做物理,不是数学。物理就是物的作用,Object和function, 你
不服有用吗?尼玛装逼装到头了,居然连物理都狭隘了。虽然我不反对特定模块用
scala,但fp跟OO一比,这局限性就出来了。这个才叫做不争的事实。FP几十年了,该
牛逼早牛逼了。
【在 G***l 的大作中提到】 : 呵呵,不是不符合人对世界的建模,而是不符合你的建模而已。因为你已经习惯oo了。 : 你这么说就像一个吃甜豆花的说咸豆花反人类,没见过世面的白人说鸡爪和皮蛋恶心一 : 样,自己觉得无比正确,自己的圈子里也有很多人认同你,但其实只是知识和经验的不 : 够全面所导致的狭隘观点而已。 : 再说,没有任何程序要对世界建模,只是对特定的problem建模而已。那个特定的 : problem不见得oo就合适。比如就算是一个很大的problem,也能分解成若干小的模块, : 有的模块用java合适有的用scala合适。 : 另外,对problem建模完全不是照办这个problem在现实世界的理解而简单映射到程序上 : 去。不然software engineer这个title也太侮辱engineer这个词了。engineer在解决一 : 个问题的时候,需要对原本的问题进行合理的转化,而不是简单的照搬。没有洗衣机的
|
c*******9 发帖数: 9032 | 17 "物理就是物的作用"观点太初级。
【在 g*****g 的大作中提到】 : 描述这个世界的学科叫做物理,不是数学。物理就是物的作用,Object和function, 你 : 不服有用吗?尼玛装逼装到头了,居然连物理都狭隘了。虽然我不反对特定模块用 : scala,但fp跟OO一比,这局限性就出来了。这个才叫做不争的事实。FP几十年了,该 : 牛逼早牛逼了。
|
m****a 发帖数: 2593 | 18 对,fp好写,难维护,难读,适合学院派,工业界大规模普及估计难,借用一些
好的地方是可以的,这也是现在正进行着的。
【在 z****e 的大作中提到】 : 定义是不难 : 看起来很痛苦 : 拿到一个东西 : 都不知道是func还是var : 以前拿到一个返回值 : 肯定是var,现在不好说 : : fp
|
g*****g 发帖数: 34805 | 19 尼玛少在我面前装逼,动不动就是太初级。初级的道道就因为简单,正确性被广泛接受
,你反驳不了。这就跟1+1=2,你跟我说太初级,so what?
【在 c*******9 的大作中提到】 : "物理就是物的作用"观点太初级。
|
c*******9 发帖数: 9032 | 20 你就不会好好说活,淸华的都这么沒教养? 说你初级算是婉语,不等于正确。不是我反
驳不了,实在教小学生高等数学太费劲,我也没义务手把手教你。我点到为止换别人一
看就该明白了,只有你还在
起无名之火,面子这么重要?
【在 g*****g 的大作中提到】 : 尼玛少在我面前装逼,动不动就是太初级。初级的道道就因为简单,正确性被广泛接受 : ,你反驳不了。这就跟1+1=2,你跟我说太初级,so what?
|