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 ...
随机推荐
- spring boot介绍
spring boot简介 1.spring boot是spring家族中的一个全新的框架,它用来简化spring应用程序的创建和开发过程,也可以说spring boot能简化我们之前采用ssm框架进 ...
- SCU 4438 Censor|KMP变形题
传送门 Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text P. He ...
- POJ 1458 Common Subsequence (动态规划)
题目传送门 POJ 1458 Description A subsequence of a given sequence is the given sequence with some element ...
- C#中的结构体和对象区别
经常听到有朋友在讨论C#中的结构与类有什么区别.正好这几日闲来无事,自己总结一下,希望大家指点. 1. 首先是语法定义上的区别啦,这个就不用多说了.定义类使用关键字class 定义结构使用关键字str ...
- 【DPDK】【CPU usage】DPDK应用如何计算当前系统的压力
[前言] 使用DPDK开发的朋友应该都了解使用dpdk的fwd线程的工作模式是polling模式,即100%轮询的方式去加速网络IO,这样我们在操作系统层面上来观察目标processer会发现usag ...
- 更好用的 Python 任务自动化工具:nox 官方教程
英文| nox tutorial 出处| nox 官方文档 译者| 豌豆花下猫@Python猫 Github地址:https://github.com/chinesehuazhou/nox_doc_c ...
- Java 中的foreach(增强for循环)
foreach概述 增强for循环:底层使用的是送代器,使用for循环的格式,简化了送代器的书写,foreach是JDK1.5之后出现的新特性 使用增强for循环 遍历集合 /** * 遍历集合 * ...
- springboot2 + grpc
项目情况: springboot: 2.2.2 grpc-spring-boot-starter: 2.6.1.RELEASE 项目目录: mypro: - person - grpc服务端 - l ...
- 类选择器练习:Google 案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- 匈牙利算法(Kuhn-Munkres)算法
这个算法有点难度,一般比较标准的描述网页上也有相关的描述,我在这里就简单的用十分通俗的语言给大家入个门 主要可以结合https://blog.csdn.net/zsfcg/article/detail ...