mixin很难吗?

实践类工作经常会遇到这样的问题,有些概念会用不会说,最近在学习Dart,遇到mixin便是如此。读了几篇网文总觉得良莠不齐,一群码友也说越读越懵,索性静下心来重新出发,一点一滴地弄明白。记录下来分享给大家,咱不说别人文笔不好、也不多举例子以至忘了初心,咱就看能不能以最直观的示例和最直白的讲解达到快速理解mixin的目的。
Mix in: (Phrasal Verb) Mix something in/with something. To add one substance to others, especially in cooking.
-- Oxford Advanced American Dictionary
Mix in本意主要是指烹饪时将一种东西混进另一种东西,比如打个鸡蛋,放点儿盐,一起搅。把这个概念搬到Dart这门单继承的面向对象语言中来又是几个意思呢?
根子就在单继承上,这可以说是现代编程语言的“政治正确”,但它在带来好处的同时也限制了想象空间。废话少说,以码服人:
abstract class DeveloperBase {
void code();
}
class FrontEndDeveloper extends DeveloperBase {
void code() => print('我在帮组里小姐姐写代码');
}
mixin Zhuangbility on FrontEndDeveloper {
@override
void code() => print('写代码讲究的是情怀');
void operateDatabase() => print('大不了老子删库跑路');
}
class FullStackDeveloper extends FrontEndDeveloper with Zhuangbility {}
void main() {
FullStackDeveloper fullStackDeveloper = FullStackDeveloper();
fullStackDeveloper.code();
fullStackDeveloper.operateDatabase();
}
首先我们笼统地定义了一个程序员基类DeveloperBase,程序员写程序,天经地义,没啥好说的。然后我们基于DeveloperBase定义了只要有机会就喜欢帮小姐姐干活儿的前端程序员类FrontEndDeveloper。
现在,我们实际上就可以用FrontEndDeveloper来干活儿了,但是单就一个前端程序员,刷子毕竟不够,假如我们需要一个能够主持全面工作的全栈程序员,咋整?定义一个全栈程序员类FullStackDeveloper,不管它继承自DeveloperBase还是FrontEndDeveloper,似乎都不够;定义一个后端程序员类BackEndDeveloper让FullStackDeveloper来继承,又是鱼和熊掌不可兼得的问题,毕竟单继承机制不给你这个想象空间。
所以,这种时候就得换个思路了。用mixin来声明一种混入,为了避免造成困扰,咱不叫它BackEndDeveloper而命名为高阶能力Zhuangbility,将一组新的技能混入FrontEndDeveloper,然后就可以声明前端程序员出身、带有高阶能力,既能写代码又会玩弄数据库的FullStackDeveloper了。
> dart main.dart ↙
写代码讲究的是情怀
大不了老子删库跑路
mixin很难吗?的更多相关文章
- 转:Eric Lippert:阅读代码真的很难
转自:http://blog.jobbole.com/438/ 相关文章 微软资深软件工程师:阅读代码真的很难(第2篇) 阅读优秀代码是提高开发人员修为的一种捷径 学会阅读源代码 如何阅读大型代码库? ...
- 函数式编程很难,这正是你要学习它的原因 | 外刊IT评论网
函数式编程很难,这正是你要学习它的原因 | 外刊IT评论网 函数式编程很难,这正是你要学习它的原因 156 次分享 新浪微博 腾讯微博 Tweet 人人网 QQ空间 很奇怪不是,很少有人每天都使用函数 ...
- Scala很难!
Scala很难! 本文是从 Yes, Virginia, Scala is hard 这篇文章翻译而来. 首先要说的是,我是一个Scala粉丝,我作为一个Scala语言的倡导者差不多有5年历史了.我写 ...
- UI培训就业会很难吗
众所周知UI是研究人机交互的学科,他是从互联网发展而来的,单从目前它的应用领域来看,主要应用于软件.互联网.移动智能设备.游戏和虚拟现实影音方面.这些都是新兴的热门方向和活跃领域.目前人才缺口和社会需 ...
- 最近面试java后端开发的感受:如果就以平时项目经验来面试,通过估计很难——再论面试前的准备
在上周,我密集面试了若干位Java后端的候选人,工作经验在3到5年间.我的标准其实不复杂:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架,我相信其它公司招初级开发时,应该也照着这个标准来面 ...
- No bean named 'xxxxx' is defined异常,已解决,这个坑很难发现,你get了吗
出现No bean named 'xxxxx' is defined异常 没有定义名为xxx的bean 如果你的代码写的都对,根本问题只有一个地方出错了,那就是你的 basePackage=的包名路径 ...
- js混淆加密,通过混淆Js代码让别人(很难)无法还原
js混淆加密,通过混淆Js代码让别人(很难)无法还原 使用js的混淆加密,其目的是为了保护我们的前端代码逻辑,对应一些搞技术吃饭的公司来说,为了防止被竞争对手抓取或使用自己的代码,就会考虑如何加密 ...
- 关于UIScrollView有些你很难知晓的崩溃情形
关于UIScrollView有些你很难知晓的崩溃情形 为了实现以下的功能(按钮之间的切换效果): 简短的代码如下: // // RootViewController.m // BUG // // Co ...
- 0302IT行业虽吃香,能完全享受这块“香"的也很难
面对现今严峻的就业形势,越来越多的人希望通过职业技能培训或者学历提升来提高自己的综合技能以便能够顺利地应聘到自己理想中的工作. 在2014年十大最热门行业和职业排行榜中IT行业最吃香.在十大行业里,I ...
随机推荐
- 结合docker发布后端项目(基于gradle包管理)的shell脚本
结合docker发布后端项目(基于gradle包管理)的shell脚本 本教程依据个人理解并经过实际验证为正确,特此记录下来,权当笔记. 注:基于linux操作系统(敏感信息都进行了处理) 目前主流的 ...
- Spring Boot中@Scheduled注解的使用方法
Spring Boot中@Scheduled注解的使用方法 一.定时任务注解为@Scheduled,使用方式举例如下 //定义一个按时间执行的定时任务,在每天16:00执行一次. @Scheduled ...
- Linux学习_菜鸟教程_3
我是在UBANTO上运行Linux的,开机启动时按下shift或者Esc都不能进入到grub,没有百度到可靠的教程. 暂时先这样吧.免得我把系统搞坏了,先学点实用的知识~~ Next Chapter
- Fabric1.4:运行 first-network 网络
说明:运行 first-network 网络,必须先安装好 fabric1.4 的预置环境,fabric1.4 的安装可以参考此博文:https://www.cnblogs.com/zongmin/p ...
- goland编辑器永久激活
1 下载goland破解文件补丁 链接: https://pan.baidu.com/s/1i3dFAwscXPzKV-1imvgkdA 提取码: furt 2 打开goland的安装文件,将下载好的 ...
- 《C# 爬虫 破境之道》:第一境 爬虫原理 — 第五节:数据流处理的那些事儿
为什么说到数据流了呢,因为上一节中介绍了一下异步发送请求.同样,在数据流的处理上,C#也为我们提供几个有用的异步处理方法.而且,爬虫这生物,处理数据流是基础本能,比较重要.本着这个原则,就聊一聊吧. ...
- item方法
class Person: def __init__(self, name, age): self.name = name self.age = age def __getitem__(self, i ...
- [UVA1494] Qin Shi Huang's National Road System
题目 戳这里 题解 从今天起我要改邪归正,好好刷题准备联赛! 这是一道经典的最小生成树题目. 枚举每一条边作为道士要修的路,求出包含这条边的最小生成树. 先求出原图的最小生成树. 如果要删的边在最小生 ...
- 废旧手机利用之装一个Linux系统
开篇: 在废旧手机变废为宝的路上一直没有停下,做过电脑遥控器,家居监控器,给电脑扩展屏幕以及跟着大佬学过智能机器人,但是都是一时兴趣,除了家具监控器目前正在使用之外其他也没有使用了. 最近在学习Lin ...
- 优雅写Java之三(IO与文本解析)
一.资源相关 二.路径与文件 读文件: String fileName = "str.txt"; Files.lines(Paths.get(fileName), Standard ...