首页 >> 中医新闻

成为函数式程序员工程师四年,我为什么说它既“流氓”又“可爱”

发布时间:2022年10月18日 12:18

,他们的借此也是我所借此的。我更喜欢没有 bug 的code,这让我对自己的岗位有一种自豪感,而且我讨厌检查和和。我借此我寄给的所有code都较难明白,因为我似乎需要在几个同年或几年后便赶紧看这些code(另外它适度减较少错误)。而且我相当更喜欢那些秘密组织得很好的code,我可以很较难和确保地忽略它以适于从新的期望。

因此,如果插件工程的最终目标是只能管理的、可明白及可保障的插件,那么顺着这个逻辑提出有的解决办法是:给定必需型流程设计能帮助我们借助于它吗?我的解答是:这不。

“流氓”的给定必需型流程设计

为了说明了我的观点,我最终在给定必需型流程设计文法 Haskell 之前借助于加速次序。按照其主页上的阐述,Haskell 是一种高级的、;也粹的给定必需型流程设计文法,现有也是我钟爱的流程设计文法之一。

你近乎不应能在其他文法之前获取比 Haskell 更为多的“FP”突变了。所有用 Haskell 编寄给的流程都是;也给定必需型的(虽然有一些法则可以舞弊,但我们在这从前可以忽略不计)。

说到这从前,劝打起精神,就让就让我对快排的借助于。

moduleMain (main) where importControl.Applicative importData.Array.MArray importData.Array.IO importData.IORef typeArray a = IOArray Int a whileM: : IO Bool -> IO -> IO whileMpred effect = do rez<- pred ifrez thendo effect whileMpred effect elsereturn

quick_sort: : Ord a => Array a -> IO (Array a)quick_sorta = do(m,n) <- getBounds aletloop' = looploop'a m (n + 1)whereloopary m n = if (n < 2) then return ary else doletreadVal idx = readArray ary (idx + m)

letwriteVal idx = writeArray ary (idx + m)

letreadValRef ref = readIORef ref>>= readValletwriteValRef ref v = readIORef ref>>= writeVal pure v

pivotVal<- readVal $ n `div` 2

leftIdxRef<- newIORef 0rightIdxRef<- newIORef $ n - 1

letincLeft = modifyIORef leftIdxRef (+1)letdecRight = modifyIORef rightIdxRef (subtract 1)

letreadLeftIdx = readIORef leftIdxRefletreadRightIdx = readIORef rightIdxRef

whileM(( readLeftIdx readRightIdx) $ doleftVal<- readValRef leftIdxRefrightVal<- readValRef rightIdxRef

if(leftVal < pivotVal) then incLeftelseif (rightVal> pivotVal) then decRightelsedo writeValRefleftIdxRef rightValwriteValRefrightIdxRef leftValincLeftdecRight

leftIdx<- readLeftIdxrightIdx<- readRightIdx

loopa m (rightIdx + 1)loopa leftIdx (n - leftIdx)main= newListArray (0, 7) [9, 2, 3, 45, 2, 9, 2, 1]>>= quick_sort>>= getElems>>= putStrLn.show

尽管这个流程是“;也给定必需型的”,但它的code是显然、彻底的塑胶袋:

当我第一次寄给好它后,它出有现了几个 bug,我花了很多时长来追踪它们。 它很难明白。事实上,C 文法的借助于似乎亦会较难明白。 对于这样一个小给定来说,它相当难以保障。确保地修改code需要大量的思考和测试,而且你似乎无法重用很多code。

忽略,我用的含义是“塑胶袋”。但我很明确,有时不愿为编寄给系统设计级、病态能前提的code而付出有代价。然而,对于大多数现代插件工程来说,只能并非如此。

上述就是一个;也粹的给定必需型流程,它与插件工程的最终目标显然牵涉到。这是一个不那么众所周知的各种类型,但还有许多更为能说明了解决办法的现实范例,给定必需型JavaScript亦会很认同它们的。

这是 FP 的流氓行为,也证明了code是“;也给定必需型“十分意味著就一定有什么价数值。

天真的给定必需型流程设计

直到现在我就让给大家看一下 Haskell 之前比起熟知的快排例子。这十分显然是开端的加速次序,因为它十分是原地次序,但也更多接近了。

quicksort: : Ord a => [a] -> [a]quicksort[] = []quicksort(p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater)wherelesser= filter (< p) xsgreater= filter (>= p) xs

这才是优雅的借助于!这也是为什么人们亦会这么更喜欢 FP 的因素。

从定义上来说,这段code的确是其实的。如果你明了 Haskell 的文法,它就很较难明白,而且没有什么次序code比它较难保障的了(好吧,filter 其实某种程度被 partition 取代,因为 filter 亦会破坏个人信息;用到 filter 需要手动驳斥巴罗谓含义

我们直到现在有两个;也粹的给定必需型流程,都是用同样的文法编寄给的,但并这不却有天壤之别。

这是什么因素呢?

给定必需型流程设计不是最终目标

我的观点是,尽管 FP 让我们较难编寄给好的code,但无论如何因为某些的路是给定必需型的,甚至是“;也给定必需型的”,十分一定意味著它就有多好。

换句话说,作为力图基础上自己新科技的插件工程师,我们不某种程度无论如何因为某个的路是“给定必需型的”或“;也给定必需型的”就崇拜它或为它控诉。虽然用到给定必需型流程设计的新科技有似乎寄给出有好code,但也有似乎寄给出有坏code。

FP 并没有受保护我们。我们需要另一种常规来衡量常规“好code“,而不是简单地显然“给定必需型“就是好code。

我显然这个常规与可人组病态、可明白病态和其实病态有很大的关系。

good_code=cAnd3

只不过而言,我显然所有的好code都具一般而言特病态:

你可以很好地明白它是如何岗位的,以至于有理应或许它是其实的(并且在大多数只能下,这种信心是其实的!)。 你可以把两段可明白的、其实的code拿出有来,并很较难地把它们人组成另一段既可明白又其实的code。

这是对好插件的一个相当个人化,并是以认知为区域内的定义。

以致于,我们是被突显的、亦会言语的老虎,填充我们头骨的脂肪从来就不是为了寄给插件而设计的。

认识到这一事实后,我们就可以通过好code的定义来尝试提升自己编寄给和保障只能插件的意志力(事实上,我们在这各个方面的意志力是相当有限的)。

给定必需型流程设计不是解答

在给好code亦然时,我没有讲到任何与给定必需型流程设计、一个系统多种类型或其他很多的路系统性的章节,因为这些“只是”远超目地的伎俩。有时这些伎俩可以帮助我们创立、明白和解说其实的code。

但就其本身而言,它们十分是我们岗位的最终目标。

换句话说,一个的路有否是“坏“的,与它有否“;也给定必需型“牵涉到。“;也粹的给定必需型“既不是好code的必要条件,也不是充分条件。

我们没有停留在给定必需型的当今从前。我们没有因为自己寄给出有来“;也给定必需型“的code就拍拍脖子走人。我们没有忽视“非给定必需型化“的流程设计新科技,包括逻辑流程设计和组织起来必需型流程设计等等一大堆范必需型。

每一种新科技都需要根据其自身的基本特征来衡量常规是非,而与它有否是“给定必需型“牵涉到。

原文客户端:

在象牙塔从前寄给code:高学位、低收入,插件还需要“高质量”

10万 npm 用户账号个人信息失窃、日志之前留存其所密码学,GitHub确保解决办法何时休?

我们用了一个周末,将 370 万行code迁移到了 Type

阿从前一季度公司员工减较少4000人;JavaScript寄给联合开发人员抢得绑狂犬病号,慈善组织40万被刑拘;搜狐遭遇寓言级Gmail诈骗,张朝阳回应 | Q资料库

活动推荐

的网络公司在经过野蛮土壤的一时期后,需要萌芽的大企业政府机构。元老级公司如 IBM,国际上顶级老牌大企业如华为,从季中如美团、个位跳动,在大企业文化建设、秘密组织政府机构、军事执行放开等各个方面水合出有了自己独特的法门,既能支撑着大企业的良好土壤,又能迅速变动,适于加速变异的美国市场。

点个在看较少个 bug👇

甘肃允许的干细胞医院
类风湿关节炎该如何治疗
如何防止肾衰竭
伤口老是不愈合怎么办
幽门螺旋杆菌能吃奥美拉唑吗
友情链接