Redian新闻
>
一年多前我发了几个贴子关于FP的想法
avatar
一年多前我发了几个贴子关于FP的想法# Programming - 葵花宝典
t*1
1
where's my refund上面查5/18号已经 direct deposit了,但是银行账户上还没有显示
。打电话去银行问也说没有attempt deposit。这种情况应该怎么办?有可能是routing
number或者account number 填错了吗?
avatar
g*a
2
我等到花儿都谢了。
avatar
m*U
4


【在 g******a 的大作中提到】
: 我等到花儿都谢了。
avatar
G*l
6
各个语言不同吧。而且跟背景也有关系,完全没接触过的和接触过一些当然不一样。我
真正认真去学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一般需要学习多久吧?

avatar
z*e
7
定义是不难
看起来很痛苦
拿到一个东西
都不知道是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不能或者

avatar
G*l
8
你这妄图中学为体,西学为用,行不通的。
你要写fp就要忘记oo把你洗脑的东西。fp里面,func也是一种var。为什么要区分,实
在要区分,用名字不行吗?你拿到一个返回值,你调用的那个function没有定义吗?怎
么不知道返回的是什么。按你这么说,java里可以说看到一个东西,都不是到是string
还是int,拿到一个返回值,不好说是int还是string,我没法用了。

【在 z****e 的大作中提到】
: 定义是不难
: 看起来很痛苦
: 拿到一个东西
: 都不知道是func还是var
: 以前拿到一个返回值
: 肯定是var,现在不好说
:
: fp

avatar
z*e
9
那这个太抽象
会乱
以前写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,我没法用了。

avatar
G*l
10
首先不明白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掌握起来更容易,也更顺畅

avatar
g*g
11
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没用,我是不会闲着没事浪费
: 自己时间金钱去用的。

avatar
G*l
12
逻辑在哪里?因为FP比OO早且直到现在也没有OO流行,所以FP以后也不会流行?
过去FP没有流行的限制现在已经少了很多,更强大的compiler和ide,性能过剩的硬件
,FP的一部分缺点可以忽略了,人们又需要他的优点,所以就开始流行了,就是这么简
单。

【在 g*****g 的大作中提到】
: FP出现比OO早了无数年,到现在仍然不流行,还不说明问题吗?俺小的时候听说世界语
: 很牛逼,长大了发现真正走世界还是英语靠谱。
:
: 已。
: fp

avatar
z*e
13
fp在一般的oo level属于没事找事,绝大多数人不需要用到fp做的事
真正需要fp的人,又面临着实际经验不足的问题
显得很空中楼阁,最后就看一堆人在扯蛋,鸡同鸭讲
现在说的fp主要是说scala而不是lisp,haskell
虽然有fp,但是scala跑在jvm上,这差距太大了
什么东西都太理想了,往往会摔得很惨

【在 G***l 的大作中提到】
: 逻辑在哪里?因为FP比OO早且直到现在也没有OO流行,所以FP以后也不会流行?
: 过去FP没有流行的限制现在已经少了很多,更强大的compiler和ide,性能过剩的硬件
: ,FP的一部分缺点可以忽略了,人们又需要他的优点,所以就开始流行了,就是这么简
: 单。

avatar
G*l
14
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上,这差距太大了
: 什么东西都太理想了,往往会摔得很惨

avatar
p*r
15
如果大多数人都对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的明星效应嘛?

avatar
z*e
16

这两个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支持。他们的委员
: 会都脑抽了?水平和眼光还如不这个版上的人强?

avatar
g*g
17
fp不只是慢而已,不符合人对世界的建模呀。把世界看成matrix的是很少的人。到现在
也不过在并发类库上有所建树而已。写类库和写应用是两码事。就如spark是Scala写的
,不妨碍Java去调用。

【在 G***l 的大作中提到】
: 逻辑在哪里?因为FP比OO早且直到现在也没有OO流行,所以FP以后也不会流行?
: 过去FP没有流行的限制现在已经少了很多,更强大的compiler和ide,性能过剩的硬件
: ,FP的一部分缺点可以忽略了,人们又需要他的优点,所以就开始流行了,就是这么简
: 单。

avatar
G*l
18
呵呵,不是不符合人对世界的建模,而是不符合你的建模而已。因为你已经习惯oo了。
你这么说就像一个吃甜豆花的说咸豆花反人类,没见过世面的白人说鸡爪和皮蛋恶心一
样,自己觉得无比正确,自己的圈子里也有很多人认同你,但其实只是知识和经验的不
够全面所导致的狭隘观点而已。
再说,没有任何程序要对世界建模,只是对特定的problem建模而已。那个特定的
problem不见得oo就合适。比如就算是一个很大的problem,也能分解成若干小的模块,
有的模块用java合适有的用scala合适。
另外,对problem建模完全不是照办这个problem在现实世界的理解而简单映射到程序上
去。不然software engineer这个title也太侮辱engineer这个词了。engineer在解决一
个问题的时候,需要对原本的问题进行合理的转化,而不是简单的照搬。没有洗衣机的
时候人们是用手搓洗衣服,或者在搓衣板上搓洗衣服。如果按照最符合人对世界建模的
观点的话,洗衣机应该设计成一个机械手抓住衣服搓洗。哈哈,幸好设计洗衣机的人没
那么二。

【在 g*****g 的大作中提到】
: fp不只是慢而已,不符合人对世界的建模呀。把世界看成matrix的是很少的人。到现在
: 也不过在并发类库上有所建树而已。写类库和写应用是两码事。就如spark是Scala写的
: ,不妨碍Java去调用。

avatar
g*g
19
描述这个世界的学科叫做物理,不是数学。物理就是物的作用,Object和function, 你
不服有用吗?尼玛装逼装到头了,居然连物理都狭隘了。虽然我不反对特定模块用
scala,但fp跟OO一比,这局限性就出来了。这个才叫做不争的事实。FP几十年了,该
牛逼早牛逼了。

【在 G***l 的大作中提到】
: 呵呵,不是不符合人对世界的建模,而是不符合你的建模而已。因为你已经习惯oo了。
: 你这么说就像一个吃甜豆花的说咸豆花反人类,没见过世面的白人说鸡爪和皮蛋恶心一
: 样,自己觉得无比正确,自己的圈子里也有很多人认同你,但其实只是知识和经验的不
: 够全面所导致的狭隘观点而已。
: 再说,没有任何程序要对世界建模,只是对特定的problem建模而已。那个特定的
: problem不见得oo就合适。比如就算是一个很大的problem,也能分解成若干小的模块,
: 有的模块用java合适有的用scala合适。
: 另外,对problem建模完全不是照办这个problem在现实世界的理解而简单映射到程序上
: 去。不然software engineer这个title也太侮辱engineer这个词了。engineer在解决一
: 个问题的时候,需要对原本的问题进行合理的转化,而不是简单的照搬。没有洗衣机的

avatar
c*9
20
"物理就是物的作用"观点太初级。

【在 g*****g 的大作中提到】
: 描述这个世界的学科叫做物理,不是数学。物理就是物的作用,Object和function, 你
: 不服有用吗?尼玛装逼装到头了,居然连物理都狭隘了。虽然我不反对特定模块用
: scala,但fp跟OO一比,这局限性就出来了。这个才叫做不争的事实。FP几十年了,该
: 牛逼早牛逼了。

avatar
m*a
21
对,fp好写,难维护,难读,适合学院派,工业界大规模普及估计难,借用一些
好的地方是可以的,这也是现在正进行着的。

【在 z****e 的大作中提到】
: 定义是不难
: 看起来很痛苦
: 拿到一个东西
: 都不知道是func还是var
: 以前拿到一个返回值
: 肯定是var,现在不好说
:
: fp

avatar
g*g
22
尼玛少在我面前装逼,动不动就是太初级。初级的道道就因为简单,正确性被广泛接受
,你反驳不了。这就跟1+1=2,你跟我说太初级,so what?

【在 c*******9 的大作中提到】
: "物理就是物的作用"观点太初级。
avatar
c*9
23
你就不会好好说活,淸华的都这么沒教养? 说你初级算是婉语,不等于正确。不是我反
驳不了,实在教小学生高等数学太费劲,我也没义务手把手教你。我点到为止换别人一
看就该明白了,只有你还在
起无名之火,面子这么重要?

【在 g*****g 的大作中提到】
: 尼玛少在我面前装逼,动不动就是太初级。初级的道道就因为简单,正确性被广泛接受
: ,你反驳不了。这就跟1+1=2,你跟我说太初级,so what?

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。