首页
学习
活动
专区
工具
TVP
发布

我杨某人的青春满是悔恨

专栏作者
52
文章
52324
阅读量
11
订阅数
函数式思维(二)-- 为何你想不到用 reduce
上次我写了一篇简单介绍函数式思维的文章,我们组的同学看了之后表示很感兴趣,希望我有空多写写这方面的内容,然后表示他能想到用数组的 map,但是想不到 reduce。我想这可能也是个普遍现象,因为在对 FP(函数式编程)接触不多的同学来讲,脑海中对 map 的印象,可能基本等同于循环,而对 reduce 就相对陌生。但其实呢,reduce 是个比 map、flatMap 啥的更通用的函数,你可以用 reduce 轻易地实现其他函数。
Sheepy
2018-12-14
3370
函数式思维
自从大四看了三章《SICP》之后我就自诩为一个函数式编程爱好者,之前也在公司分享过一个 Haskell 的 Topic,效果非常糟糕,讲到后来已经没剩几个人了,只得草草收场。在写这篇文章的时候我突然想起来,之前还发过一个朋友圈,跟人论述我对范畴论一些概念的理解,翻了翻朋友圈找到了:
Sheepy
2018-12-11
3810
找零问题与动态规划
后来我发现在 leet code 也有类似的题,是个找零问题,就是不同面值的硬币组合成一个数有多少种情况。还挺有意思的,我就做了一下,用了递归:
Sheepy
2018-12-06
8510
如何提高代码品味
写代码虽然大多数时候是个体力活,但不可否认,也需要一点品位。我曾经觉得代码质量很重要,后来写业务写多了,又觉得如果连代码正确都做不到,又谈何代码质量。后来我又醒悟了,这世上很难有 bug free 的代码,当出现 bug 的时候,好代码比烂代码会好改很多。我们今天就讨论下什么是好代码,毕竟一个不知道什么样的代码是好代码的人是不可能如有神助写出好代码的,写代码可以搜索复制黏贴三板斧,写好代码却是必须刻意练习的。
Sheepy
2018-11-09
7700
常见的客户端架构解析
最早的 MVC 于 1979 年提出,当时还需要程序员全权处理用户输入——Controller 的职责。而现在,大部分事情已经被操作系统做了,我们已经做不到“View 永远不会知道用户的输入”,我们也不太需要 Editor,因为这些已经被封装进UITextField之类的控件中,View 本身就具备一定的交互功能。用户操作往往被封装成“事件”传递给 View。
Sheepy
2018-09-10
2K0
RxCocoa 源码解析——代理转发
平常我们使用 RxSwift 的时候,一般不会去直接使用 delegate,譬如要处理 tableView 的点击事件,我们会这样:tableView.rx.itemSelected.subscribe(onNext: handleSelectedIndexPath),这跟先设置一个 delegate,然后在 delegate 的tableView(_:didSelectRowAt:)方法中调用handleSelectedIndexPath的效果是一样的。那这个过程到底是如何进行的呢?我们进入 RxCocoa 的 UITableView+Rx.swift 文件来一探究竟,这个文件中不仅有itemSelected,还有诸如itemDeselected、itemAccessoryButtonTapped、itemInserted、itemDeleted、itemMoved等等一系列对应 tableView delegate 的包装方法,本文就以itemSelected为例,其他的都是相同的原理。为便于理解,我会给源码加一点中文注释,:
Sheepy
2018-09-10
9910
Monad 定律
monad 是支持>>=操作的 applicative 函子,>>=读作绑定,它的类型是:
Sheepy
2018-09-10
4650
Learning From Data Note 1
周末上了一节 Yaser 的网上公开课,教授的发音虽然有点奇怪,但是为人风趣,循循善诱,课程内容也是深入浅出,既有干货又不至于太过枯燥乏味。看完之后记了一点笔记,记录于此,希望自己能学完这套课程。(因为是英文课程,就直接记英文了,也算练习下英文)
Sheepy
2018-09-10
3320
函子定律
前段时间学了下 Haskell,看完了《Haskell 趣学指南》,刷了一些题,《Real World Haskell》正在看。因为早先看过《SICP》,有点 FP 的基础,平常写 Swift 也喜欢用些 FP 的技巧,所以暂时没有什么特别颠覆性的感觉。最大的感受是,以前对 Functor、Applicative 和 Monad 的理解太片面了。
Sheepy
2018-09-10
8870
Applicative 函子
Application 函子是一种加强的函子,在 Haskell 的 Control.Applicative 模块中定义了一个 Applicative 类型类:
Sheepy
2018-09-10
7120
深入理解 weak-strong dance
这时handler持有 Block 对象,而 Block 对象虽然捕获了weakSelf,延长了weakSelf这个局部变量的生命周期,但weakSelf是附有__weak修饰符的变量,它并不会持有对象,一旦它指向的对象被废弃了,它将自动被赋值为nil。在多线程情况下,可能weakSelf指向的对象会在 Block 执行前被废弃,这在上例中无伤大雅,只会输出Self is nil,但在有些情况下(譬如在 Block 中有移除 KVO 的观察者的逻辑,在执行到该逻辑前 self 就释放了)就会导致 crash。这时可以在 Block 内部(第一句)再持有一次weakSelf指向的对象,保证在执行 Block 期间该对象不会被废弃,这就是所谓的 weak-strong dance:
Sheepy
2018-09-10
1.9K0
走进 RxSwift 之冷暖自知
前段时间身体跟心态都出了点问题,博客也很久没更新了。细心的朋友可能发现我的个人介绍换了,由原先高冷装逼的“谢绝转载”变为略显矫情的“人生谁能不迷茫”了。不知道大家有没有这样的经历,因为一些三言两语难以说清的理由,或者干脆就是无端地对代码产生了一些排斥情绪,下班后看不进书也不想碰代码。我经历了几天这样的日子,挺难受的,好在很快就走出来了。编程本身其实是件有趣的事,但任何事情,一旦将其作为职业,便也失了纯粹,总会有身不由己的时候。做个程序猿,也是如人饮水,冷暖自知。
Sheepy
2018-09-10
2.3K1
POP 实现 Template Method
模板方法是一种古老的设计模式,它使用一些抽象的操作定义一套算法或者流程,父类决定步骤,子类决定具体实现,当然父类可以提供一个默认实现。
Sheepy
2018-09-10
8800
一定要热爱编程才能当程序员么?
第一次接触编程,是高中的时候,参加 NOIP,学的 Pascal。但是不同于各位少年天才的传奇经历,我搞了半天没有搞出啥名头,就市里拿了点小奖,连复赛也没进。
Sheepy
2018-09-10
3370
狼人杀入坑指南
之前在年终总结里说 2017 年可能要退出搜车狼人杀 club 了,想想就这么净身出户还是有些遗憾,不如就把这两个月的游戏心得总结一下。当然我自己也是个业余选手,这篇是名副其实的入门指南,不喜……随便喷。
Sheepy
2018-09-10
6540
使用 MVVM 架构时页面跳转逻辑写在哪儿?
之前我一直在 ViewModel 中处理页面跳转逻辑,VC 直接拿到目标页面进行 push/present。前些天 Code Review 时,同事指出理论上 ViewModel 里不应该出现跟 UIKit 相关的东西。
Sheepy
2018-09-10
1.7K0
试水 Mac 开发 —— 代码生成器
国庆的时候写了个小工具来将 JSON 转化成 Model,也算是我的第一个 Mac App,今天重构了下,顺便跟大家分享下 Mac 开发有多不方便……
Sheepy
2018-09-10
7010
如何将第三方库与业务代码解耦
日常开发中我们经常会用到各种第三方库,而如何使用别人的代码其实也有一点讲究。如果直接在业务代码中使用第三方库,导致项目对某个第三方库的依赖过重,那一旦因为各种原因需要更换方案的时候,所需要修改的代码量之大可能还不如直接重写了。
Sheepy
2018-09-10
7420
Swift API 设计指南(下)
一般来说,默认参数比方法族(method families)更可取,因为它减轻了 API 使用者的认知负担。
Sheepy
2018-09-10
3990
Swift API 设计指南(上)
本文翻译自苹果官方文档:Swift API Design Guidelines,如有错漏,欢迎指出。
Sheepy
2018-09-10
6310
点击加载更多
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档