n******7 发帖数: 12463 | 1 我也不知道这算是什么风格
举个例子,对不同类型数据进行一些操作
有些共同的处理,也有些类型特异的操作
具体还需要根据数据有些部分做一些分支判断
直接写就是各种if/for 语句,最多做些refactoring增强可读性。
我感觉这样做人类的逻辑被编程语言的语法给稀释了
很难在脑子里面建立一个清楚的处理逻辑
这样就有可以引入bug,维护代码也比较头疼
我的做法是对这样数据格式化,用一种统一的形式表示它们
然后把所有的语言处理逻辑写在一起,就是给出一条格式化过的数据,经过一套处理就
得到结果了。
具体到我用的C#,我一般用一个tuple来统一的表示格式化的数据
用一堆func/action的组合来表示处理过程,这个组合最后就是一个大的func/action
整个处理过程就是给一个tuple的集合,挨个用这个func/action加工一下就好
这个tuple本身就包含了输入数据以及对加工处理方法的一些高级指示
只要看看tuple的内容就基本明白这坨代码是要怎么工作了
希望我表述清楚了
我挺喜欢这种方式,不知道有没有什么术语就是描述这种风格的?
如果有,我想深入学习一下 |
g****t 发帖数: 31659 | 2 Tuple是只读的吧?你的function没有状态吧?不然组合起来很麻烦。
Immutable 数据结构,加上无状态的函数组合,就是functional 编程
(无类型那种)吧。看一下lisp, clojure ?
另外也许还可以看下data flow programming。
另外你描述的这套办法,对GUI应该很难使用。backend类似于信号处理的地方我觉得可
以用。 |
n******7 发帖数: 12463 | 3 对,没有状态,其实就是数据处理机
其实包括function的建立,也可以用一组tuple来描述
我最近做的是一个事情就是用一个binary decision tree(不知道有这个名词没)
来描述一个数据处理的逻辑
而每个逻辑分支都是用一个tuple描述:(test,if-true, if-false)
这样用一组tuple就描述了整个处理逻辑
不用写一堆if-else判断一层套一层了
所有的逻辑一屏不到就看完了,觉得很适合内存不大的人脑
我一直喜欢clojure,虽然一直处于入门状态
不过我们在dotnet上开发
不知道F#能不能一战
另外clojure是动态语言
我用C#这样写的时候总觉得静态类型有些局限
但是我的老大禁止我用reflection,因为performance的缘故,也确实是没必要,如果
我不非要这样写的话。
【在 g****t 的大作中提到】 : Tuple是只读的吧?你的function没有状态吧?不然组合起来很麻烦。 : Immutable 数据结构,加上无状态的函数组合,就是functional 编程 : (无类型那种)吧。看一下lisp, clojure ? : 另外也许还可以看下data flow programming。 : 另外你描述的这套办法,对GUI应该很难使用。backend类似于信号处理的地方我觉得可 : 以用。
|
n******7 发帖数: 12463 | 4 看了下data flow programming,感觉有那么点意思
但是再一看语言,居然基本都没见过,除了simulink和VHDL
VHDL还是最近从FPGA组刚听来的。。
【在 g****t 的大作中提到】 : Tuple是只读的吧?你的function没有状态吧?不然组合起来很麻烦。 : Immutable 数据结构,加上无状态的函数组合,就是functional 编程 : (无类型那种)吧。看一下lisp, clojure ? : 另外也许还可以看下data flow programming。 : 另外你描述的这套办法,对GUI应该很难使用。backend类似于信号处理的地方我觉得可 : 以用。
|
p***o 发帖数: 1252 | 5 远有hadoop/spark近有tensorflow/pytorch
【在 n******7 的大作中提到】 : 看了下data flow programming,感觉有那么点意思 : 但是再一看语言,居然基本都没见过,除了simulink和VHDL : VHDL还是最近从FPGA组刚听来的。。
|
n******7 发帖数: 12463 | 6 tensorflow/pytorch不是做DL的吗
也算data flow?
data 流过一层层网络?
【在 p***o 的大作中提到】 : 远有hadoop/spark近有tensorflow/pytorch
|
p***o 发帖数: 1252 | 7 是这样,就是个可以用GPU加速还可以对某些输入求导的DFG。
【在 n******7 的大作中提到】 : tensorflow/pytorch不是做DL的吗 : 也算data flow? : data 流过一层层网络?
|
n******7 发帖数: 12463 | 8 这个不够通用啊
【在 p***o 的大作中提到】 : 是这样,就是个可以用GPU加速还可以对某些输入求导的DFG。
|
n******7 发帖数: 12463 | |
g****t 发帖数: 31659 | 10 这文章不太靠谱。
我的浅见:
1。有状态的类里面不搞啥纯函数了。放public void updateX(double[][] x)之类的
用reference的update方法。
2。纯函数单独放一个类。参考下Java自带的math类。
3。全部贯彻纯函数不太现实。因为需要大量的copy。
函数参数假如是个高维数组,多数语言进去函数里面都是地址。
数组小的话,函数里第一行copy一下就好。大的话,只能用reference了。
最后,一个功能模块一个写法更合适。一个办法写到底是很难搞的。oo在很多地方是必
须的。functional的办法写信号transfer方便易懂。但是大量数据有时候要copy。会乱
。另外functional无法方便的处理GUI,传感器信号IO listener等等。画图更不用说了。
最后。一个办法写上几万行,自然就碰到毛病和各种修了。我认为具体大于抽象,不宜
执着。
【在 n******7 的大作中提到】 : 搜到一篇文章,虽然有点旧 : Basics of Dataflow Programming in F# and C# : https://www.codeproject.com/articles/107121/basics-of-dataflow-programming- : in-f-and-c
|
|
|
g****t 发帖数: 31659 | 11 tensorflow方法论混乱。越来越乱。
【在 n******7 的大作中提到】 : 这个不够通用啊
|
d******c 发帖数: 2407 | 12 专家系统的规则集合
if else不嵌套是好事
【在 n******7 的大作中提到】 : 我也不知道这算是什么风格 : 举个例子,对不同类型数据进行一些操作 : 有些共同的处理,也有些类型特异的操作 : 具体还需要根据数据有些部分做一些分支判断 : 直接写就是各种if/for 语句,最多做些refactoring增强可读性。 : 我感觉这样做人类的逻辑被编程语言的语法给稀释了 : 很难在脑子里面建立一个清楚的处理逻辑 : 这样就有可以引入bug,维护代码也比较头疼 : 我的做法是对这样数据格式化,用一种统一的形式表示它们 : 然后把所有的语言处理逻辑写在一起,就是给出一条格式化过的数据,经过一套处理就
|
n******7 发帖数: 12463 | 13 嗯,今天仔细看了一下这个文章
对于我的需要overkill了
我是实用主义派,那种写法简洁高效优雅就怎么写
我们大组有个project,虽然也是C#的,但是通篇functional style, monads啥的
我是看的挺累
写这个的高手升职了,后来maintain这个项目的小哥苦不堪言
感觉就是文言和白话的区别
【在 g****t 的大作中提到】 : 这文章不太靠谱。 : 我的浅见: : 1。有状态的类里面不搞啥纯函数了。放public void updateX(double[][] x)之类的 : 用reference的update方法。 : 2。纯函数单独放一个类。参考下Java自带的math类。 : 3。全部贯彻纯函数不太现实。因为需要大量的copy。 : 函数参数假如是个高维数组,多数语言进去函数里面都是地址。 : 数组小的话,函数里第一行copy一下就好。大的话,只能用reference了。 : 最后,一个功能模块一个写法更合适。一个办法写到底是很难搞的。oo在很多地方是必 : 须的。functional的办法写信号transfer方便易懂。但是大量数据有时候要copy。会乱
|
l******t 发帖数: 55733 | |
n*w 发帖数: 3393 | 15 写企业应用要自己定义monad的机会不多。一直做对此有刚需的项目。 |
n******7 发帖数: 12463 | 16 update一下
还没有code review,只是standup提了一下
有同事表示阅读有困难
想想没必要当个强推自己风格的asshole
又花了点时间改成一般的oop风格
改的过程中就因为各种判断逻辑东一块西一块
老要对照改之前的一片描述逻辑的code来写
感觉还是喜欢自己的风格
另一个感觉是C#不适合这种写法
实现的很丑,跟自己水平有限也有关系吧
这也是同事不喜欢的原因之一
Lisp应该好很多,不过我估计没机会用clojure
计划再把F#捡起来看看能不能一战 |