介绍Intellij IDEA安装Scala插件后,如何在阅读和编码两方面助益开发者。
 
 
1. 语言专家
 
Scala是一门多范式编程语言,在支持面向对象编程的同时,也支持函数式语法。再加上隐式规则和宏等特性,以及众多的语法糖。使得Scala的学习曲线异常陡峭。
 
除了语言规范、教程图书、网络资料之外,一个强大的能够智能提示补全、时时检查提醒的编辑器或者IDE,可以极大的提高学习速度和编码效率。
 
事实上,除了语言的父亲(father of Scala)、语言规范委员会、编译器实现团队之外,编辑器或IDE的开发者可能是对语言最为擅长的了。他们开发的编辑器或IDE相较于一般的初学者,也能被称作专家了。
 
现代化的IDE是相当智能和强大的,犹如一个贴身语言专家,为开发者保驾护航。
 
Intellij IDEA就是这样的一个IDE,当之无愧。
 
 
2. 注意事项
 
在介绍Intellij IDEA之前,首先列几点Scala编程注意事项:
 
1) 代码不只是要功能正确,还要用于沟通协同。所以代码要在功能正确的基础上,尽量的简单易懂;
 
2) 不要炫技:Scala是一门很优秀的语言,包含众多的语法糖。编写时以信达雅为要,不要在不必要的情况下,使用花哨的语法糖;
 
3) 不用宏:宏的代码较为艰涩,且宏编程是一个试验性的语言特性。除非必须,不要使用;
 
4) 慎用隐式规则:隐式规则是一个潘多拉魔盒,使代码难以理解;若必须使用,则不宜默认的导入,需要在使用的地方显式导入(import x.y.z.implicits._)。
 
 
3. 代码阅读
 
以Rocket-Chip源码为例。
 
1) 代码跟踪
 
a. 按住Ctrl,使用鼠标点击,可以跟踪各类定义,如类、方法、变量等;
 
b. 跟踪子类
 
点击左侧图标,如:
 
点击之后,显示如下:
 
c. 跟踪方法在哪些子类中实现
 
 
点击后显示如下:
 
 
d. 跟踪方法覆盖的父类方法定义
 
 
点击后跳转至父类的方法:
 
e. 查找使用之处
 
 
 
 
2) 代码提示
 
a. package与文件夹路径不一致
 
 
按住快捷键Alt+Enter,会提示可以采取的措施,以修复这个提示:
 
选中之后即可实施。
 
b. 优化建议:多余的花括号
 
 
按住快捷键Alt+Enter,即可给出建议。使用Unwrap可以把多余的花括号去掉:
 
c. 优化建议:提示带上返回值类型
 
 
d. 代码提示:查看代码类型
 
Scala代码可以省略变量类型,根据后面赋值的变量类型进行推断。
 
Alt+Enter,
 
Enter,
 
 
e. 提示隐式宏调用
 
 
f. 优化建议:map/foreach
 
看到过但没找到,所以不贴代码了。
 
这两个都是针对每个元素执行一个函数,只是一个有返回值,一个无返回值。
易于混用,这个也会提示到。
 
g. 优化建议:indices
 
 
Alt+Enter,
 
Enter,
 
h. 优化建议:无用的import
 
 
i. 优化建议:无用的括号
 
 
j. 优化建议:无用的占位符
 
 
 
 
4. 代码编写
 
1) 自动生成必须要实现的父类方法
 
 
Enter,
 
2) 选择覆盖或实现某个方法
 
 
 
 
3) 提示及补全
 
 
 
 
 

Chisel3 - Scala语言专家的更多相关文章

  1. Scala - 语言专家 - Desugar Scala code

    https://mp.weixin.qq.com/s/zwrG1MfUzXwtik7jotpQsA   介绍Intellij IDEA中的一个去除Scala语法糖的功能.     ​​   1. 去除 ...

  2. Go 语言和 Scala 语言对比

    我在Google写过Go(自己的业余时间),也在LinkedIn写过Scala.两者都是具有一流的并发特性的现代语言. 下面的回答是基于我编写大规模的软件的经验得出. Go是一种开发模式严格固定,并且 ...

  3. 利用Scala语言开发Spark应用程序

    Spark内核是由Scala语言开发的,因此使用Scala语言开发Spark应用程序是自然而然的事情.如果你对Scala语言还不太熟悉,可 以阅读网络教程A Scala Tutorial for Ja ...

  4. Scala语言初识

    scala是一种集面向对象特性和函数式特性于一身并可运行在JVM上的强类型静态语言.因为可以运行在JVM上,并在设计时借鉴于大量的java语言特性,故可以和java互动并可以调用java相关类库,这让 ...

  5. 关于学习Scala语言的一些感悟

    进入话题! 我们知道哈,Spark源码采用Scala语言编写,那么阅读Spark源码之前,是否一定先学Scala呢? 我个人认为,不必,只要我们有一些java或c++编写语言的基础,就可以看Spaar ...

  6. 基于Spark和SparkSQL的NetFlow流量的初步分析——scala语言

    基于Spark和SparkSQL的NetFlow流量的初步分析--scala语言 标签: NetFlow Spark SparkSQL 本文主要是介绍如何使用Spark做一些简单的NetFlow数据的 ...

  7. 基于Spark环境对比Python和Scala语言利弊

    在数据挖掘中,Python和Scala语言都是极受欢迎的,本文总结两种语言在Spark环境各自特点. 本文翻译自  https://www.dezyre.com/article/Scala-vs-Py ...

  8. Scala语言笔记 - 第一篇

    目录 Scala语言笔记 - 第一篇 1 基本类型和循环的使用 2 String相关 3 模式匹配相关 4 class相关 5 函数调用相关 Scala语言笔记 - 第一篇 ​ 最近研究了下scala ...

  9. 大数据spark学习第一周Scala语言基础

    Scala简单介绍 Scala(Scala Language的简称)语言是一种能够执行于JVM和.Net平台之上的通用编程语言.既可用于大规模应用程序开发,也可用于脚本编程,它由由Martin Ode ...

随机推荐

  1. QML文字灰飞烟灭效果

    QML文字灰飞烟灭效果 1,目的 实现文字化作一缕青烟随风而逝的效果. 2,设计分析 在前面的章节中讲述了如何化作光斑碎片逐渐消失的效果,我们可以借鉴它将光斑换成烟雾,再加入端流产生微风浮动,加上字幕 ...

  2. 053.集群管理-Helm部署及使用

    一 Helm概述 1.1 Helm介绍 Helm 是 Kubernetes 的软件包管理工具.包管理器类似 Ubuntu 中使用的apt.Centos中使用的yum 或者Python中的 pip 一样 ...

  3. 【源码】RingBuffer(二)——消费者

    消费者如何读取数据? 前一篇是生产者的处理,这一篇讲消费者的处理 我们都知道,消费者无非就是不停地从队列中读取数据,处理数据.但是与BlockedQueue不同的是,RingBuffer的消费者不会对 ...

  4. Spring Boot定时任务运行一段时间后自动关闭的解决办法

    用Spring Boot默认支持的 Scheduler来运行定时任务,有时在服务器运行一段时间后会自动关闭.原因:Schedule默认是单线程运行定时任务的,即使是多个不同的定时任务,默认也是单线程运 ...

  5. Springboot中修改.properties文件为.yml文件时项目不能运行问题

    可能很多小伙伴会考虑环境配置的问题,maven版本.idea版本什么的,其实没有必要 只要你之前.ies时能运行,那么环境配置就没有问题 不能运行的原因,一定是你的.yml文件的格式问题 .yml文件 ...

  6. 关于tez-ui的"All DAGs"和"Hive Queries"页面信息为空的问题解决过程

    近段时间发现公司的HDP大数据平台的tez-ui页面不能用了,页面显示为空,导致通过hive提交的sql不能方便地查找到Yarn上对应的applicationId,只能通过beeline的屏幕输出信息 ...

  7. HttpPoolUtils 连接池管理的GET POST请求

    package com.nextjoy.projects.usercenter.util.http; import org.apache.http.Consts; import org.apache. ...

  8. 力扣题解-LCP 06. 拿硬币

    题目描述 桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中.我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数. 示例 1: 输入:[4,2,1] 输出:4 解释: ...

  9. Appium自动化(7) - 控件定位工具之Appium 的 Inspector

    如果你还想从头学起Appium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1693896.html 前言 上一篇文章介绍了另一块控件定 ...

  10. vue钩子

    全局钩子 const router = new VueRouter({ ... }) router.beforeEach((to, from, next) => { // ... }) 钩子是异 ...