scala-idea环境搭建及使用

环境搭建

创建一个新项目,选择maven工程

点击next,写入项目名,然后finish

注意:默认下,maven不支持scala的开发,需要引入scala框架,右键项目点击-》add framework

pport....,在下图选择Scala

注意:如果是第一次引入框架,use libary看不到,需要配置,配置就是选择你的scala 安装目录,然后工具就会自动识别,就会显示use libary。

创建项目的源文件目录

步骤:右键main目录创建一个diretory,写个名字比如scala,右键scala目录,mark diretory,选择source root即可

在scala包下,创建包com.某某某.scala-1包名,并创建Object

编写输出Hello scala案例

scala程序基本架构

class scala_one {

  定义变量:

  val/var 变量名:变量类型 = 变量值

  val a: Int = 1

  定义方法:

  def 函数名(参数名:参数类型):返回值类型={方法体}

  def hello(arg: String): Unit = {

    println(arg)

  }

}


object scala_one {

  Scala程序的入口

  def main(args: Array[String]): Unit = {

    println("hello,scala") }

  完全面向对象:scala完全面向对象,故scala去掉了java中非面向对象的元素,如static关键字,void类型

  1.static

  scala无static关键字,由object实现类似静态方法的功能(类名.方法名),object关键字和class的关键字定义方式相同,但作用不同。class关键字和java中的class关键字作用相同,用来定义一个类;object的作用是声明一个单例对象,object后的“类名”可以理解为该单例对象的变量名。

  2.void

  对于无返回值的函数,scala定义其返回值类型为Unit类

}

Scala程序反编译

object在底层会生成两个类 scala_one, scala_one$

scala_one中有个main函数,调用 scala_one$ 类的一个静态对象 MODULES$

scala_one$.MODULE$. 对象时静态的,通过该对象调用Hello$的main函数

可以理解我们在main中写的代码在放在scala_one$的main,在底层执行Scala编译器做了一个包装

下面我们说明一下Scala程序的执行流程:

scala_one源码

objscala_one {

def main(args: Array[String]): Unit = {

  //4. 可以理解我们在main中写的代码在放在Hello$的main,在底层执行scala编译器做了一个包装

 println("hello,scala") }}

scala_one.class类

//1. object在底层会生成两个类 Hello , Hello$

//2. Hello中有个main函数,调用 Hello$ 类的一个静态对象 MODULES$

public final class scala_one{

    public static void main(String[] paramArrayOfString) {

    scala_one$.MODULE$.main(paramArrayOfString); }}

scala_one$.class

public final class scala_one${

    public static final  MODULE$;

static { new ();  }

public void main(String[] args) {

  //3. scala_one$.MODULE$. 对象是静态的,通过该对象调用scala_one$的main函数

       Predef..MODULE$.println("hello,scala");}

    private scala_one$(){

       MODULE$ = this;}}

解释:

scala中如果使用object关键字声明类,在编译时,会同时产生两个类:当前类和当前类$。

使用当前类$的目的在于模拟静态语法,可以通过类名直接访问方法。

scala将当前类$这个对象称之为伴生对象,伴随着类所产生的对象,这个对象中的方法可以直接使用。

开发注意事项:

Scala源文件以“.scala" 为扩展名。

Scala程序的执行入口是object main()函数。

Scala语言严格区分大小写。

Scala方法由一条条语句构成,每个语句后不需要分号,

Scala语言会在每行后自动加分号)。(至简原则)

如果在同一行有多条语句,除了最后一条语句不需要分号,其它语句需要分号。

官方编程指南

        查看scala-docs-2.11.8文档,可以获得Scala的API操作

        

变量和数据类型

用于注解说明解释程序的文字就是注释,注释提高了代码的阅读性。

注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去体现。

1)基本语法

(1)单行注释://

(2)多行注释:/* */

(3)文档注释:/**

*

    */

代码规范

使用一次tab操作,实现缩进,默认整体向右边移动,用shift+tab整体向左移。

或者使用ctrl + alt + L来进行格式化。

运算符两边习惯性各加一个空格。比如:2 + 4 * 5。

一行最长不超过80个字符,超过的请使用换行展示,尽量保持格式优雅。

标识符的命名规范

Scala对各种变量方法函数等命名时使用的字符序列称为标识符。即:凡是自己可以起名字的地方都叫标识符。

命名规则

Scala中的标识符声明,基本和Java是一致的,但是细节上会有所变化,有以下四种规则:

以字母或者下划线开头,后接字母、数字、下划线

以操作符开头,且只包含操作符(+ - * / # !等)

第一种和第二种拼接,第一种在前,二者以下划线分隔

用反引号`....`包括的任意字符串,即使是关键字(39个)也可以

scala关键字(39个)

  • package, import, class, object, trait, extends, with, type, for
  • private, protected, abstract, sealed, final, implicit, lazy, override
  • try, catch, finally, throw
  • if, else, match, case, do, while, for, return, yield
  • def, val, var
  • this, super
  • new
  • true, false, null

变量

        基本语法

var | val 变量名 [: 变量类型] = 变量值

说明:在Scala中声明一个变量时,可以不指定类型,编译器根据值确定

        案例实操

声明变量时,类型可以省略(编译器自动推导,即类型推导)

      类型确定后,就不能修改,说明Scala是强数据类型语言。

变量声明时,需要初始值。

在声明/定义一个变量时,可以使用var或者val来修饰,var修饰的变量可改变,val修饰的变量不可改

val修饰的变量在编译后,等同于加上final通过反编译看下底层代码

通过反编译软件,得到对应的底层的.class是

public final class TestVar${

    public static final MODULE$;

    private int num1;

    private final int num2;

var修饰的对象引用可以改变,val修饰的则不可改变,但对象的状态(值)却是可以改变的。(比如:自定义对象、数组、集合等等)

字符串输出

基本语法

字符串,通过+号连接。

printf用法:字符串,通过%传值。

字符串,通过$引用。

案列实操

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/497761.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity 实现鼠标左键进行射击

发射脚本实现思路 分析 确定用户交互方式:通过鼠标左键点击发射子弹。确定子弹发射逻辑:每次点击后有一定时间间隔才能再次发射。确定子弹发射源和方向:子弹从枪口(Transform)位置发射,沿枪口方向前进。 变…

Spring Boot 工程开发常见问题解决方案,日常开发全覆盖

本文是 SpringBoot 开发的干货集中营,涵盖了日常开发中遇到的诸多问题,通篇着重讲解如何快速解决问题,部分重点问题会讲解原理,以及为什么要这样做。便于大家快速处理实践中经常遇到的小问题,既方便自己也方便他人&…

移动端开发思考:Uniapp的上位替代选择

文章目录 前言跨平台开发技术需求技术选型uniappFlutterMAUIAvalonia安卓原生 Flutter开发尝试Avalonia开发测试测试项目新建项目代码MainViewMainViewModel 发布/存档 MAUI实战,简单略过打包和Avalonia差不多 总结 前言 作为C# .NET程序员,我有一些移动…

Python图像处理——计算机视觉中常用的图像预处理

概述 在计算机视觉项目中,使用样本时经常会遇到图像样本不统一的问题,比如图像质量,并非所有的图像都具有相同的质量水平。在开始训练模型或运行算法之前,通常需要对图像进行预处理,以确保获得最佳的结果。图像预处理…

MySQL---触发器

一、介绍 触发器是与表有关的数据库对象,指在insert/update/delete之前(BEFORE)或之后(AFTER),触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性, 日志记录 , 数据校验等操作 。 使用别名OLD和NEW来引用触…

Ubuntu20.04安装OpenCV并在vsCode中配置

1. 安装OpenCV 1.1 安装准备: 1.1.1 安装cmake sudo apt-get install cmake 1.1.2 依赖环境 sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev sudo apt-get install libgtk2.0-d…

go的通信Channel

go的通道channel是用于协程之间数据通信的一种方式 一、channel的结构 go源码:GitHub - golang/go: The Go programming language src/runtime/chan.go type hchan struct {qcount uint // total data in the queue 队列中当前元素计数,…

Day54:WEB攻防-XSS跨站Cookie盗取表单劫持网络钓鱼溯源分析项目平台框架

目录 XSS跨站-攻击利用-凭据盗取 XSS跨站-攻击利用-数据提交 XSS跨站-攻击利用-flash钓鱼 XSS跨站-攻击利用-溯源综合 知识点: 1、XSS跨站-攻击利用-凭据盗取 2、XSS跨站-攻击利用-数据提交 3、XSS跨站-攻击利用-网络钓鱼 4、XSS跨站-攻击利用-溯源综合 漏洞原理…

智慧管道物联网远程监控解决方案

智慧管道物联网远程监控解决方案 智慧管道物联网远程监控解决方案是近年来在智能化城市建设和工业4.0背景下,针对各类管道网络进行高效、安全、精准管理的前沿科技应用。它融合了物联网技术、大数据分析、云计算以及人工智能等多种先进技术手段,实现对管…

玫瑰图和雷达图(自备)

目录 玫瑰图 数据格式 绘图基础 绘图升级(文本调整) 玫瑰图 下载数据data/2020/2020-11-24 mirrors_rfordatascience/tidytuesday - 码云 - 开源中国 (gitee.com) R语言绘图—南丁格尔玫瑰图 - 知乎 (zhihu.com) 数据格式 rm(list ls()) libr…

Unity | 工具类-UV滚动

一、内置渲染管线Shader Shader"Custom/ImageRoll" {Properties {_MainTex ("Main Tex", 2D) "white" {}_Width ("Width", float) 0.5_Distance ("Distance", float) 0}SubShader {Tags {"Queue""Trans…

AugmentedReality之路-显示隐藏AR坐标原点(3)

本文介绍如何显示/隐藏坐标原点,分析AR坐标原点跟手机的位置关系 1、AR坐标原点在哪里 当我们通过AugmentedReality的StartARSession函数打开AR相机的那一刻,相机所在的位置就是坐标原点。 2、创建指示箭头资产 1.在Content/Arrow目录创建1个Actor类…

腾讯云4核8G服务器多少钱?12M带宽646元15个月,买1年送3月

2024年腾讯云4核8G服务器租用优惠价格:轻量应用服务器4核8G12M带宽646元15个月,CVM云服务器S5实例优惠价格1437.24元买一年送3个月,腾讯云4核8G服务器活动页面 txybk.com/go/txy 活动链接打开如下图: 腾讯云4核8G服务器优惠价格 轻…

记录minio、okhttp、kotlin一连环的版本冲突问题

问题背景 项目中需要引入minio&#xff0c;添加了如下依赖 <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.2</version></dependency> 结果运行报错&#xff1a; Caused by: java.la…

黑群晖基于docker配置frp内网穿透

前言 我的黑群晖需要设置一下内网穿透来外地访问&#xff0c;虽然zerotier的p2p组网已经很不错了&#xff0c;但是这个毕竟有一定的局限性&#xff0c;比如我是ios的国区id就下载不了zerotier的app&#xff0c;组网不了 1.下载镜像 选择第一个镜像 2.映射文件 配置frpc.ini&a…

基于Spring Boot 3 + Spring Security6 + JWT + Redis实现登录、token身份认证

基于Spring Boot3实现Spring Security6 JWT Redis实现登录、token身份认证。 用户从数据库中获取。使用RESTFul风格的APi进行登录。使用JWT生成token。使用Redis进行登录过期判断。所有的工具类和数据结构在源码中都有。 系列文章指路&#x1f449; 系列文章-基于Vue3创建前端…

【机器学习300问】55、介绍推荐系统中的矩阵分解算法是什么、有什么用、怎么用?

本来这篇文章我想先讲矩阵分解算法是什么东西的&#xff0c;但这样会陷入枯燥的定义中去&#xff0c;让原本非常有趣技术在业务场景中直观的使用路径被切断。所以我觉得先通过一个具体的推荐算法的例子&#xff0c;来为大家感性的介绍矩阵分解有什么用会更加合理。 如果你还不知…

iOS开发进阶(十一):ViewController 控制器详解

文章目录 一、前言二、UIViewController三、UINavigationController四、UITabBarController五、UIPageViewController六、拓展阅读 一、前言 iOS 界面开发最重要的首属ViewController和View&#xff0c;ViewController是View的控制器&#xff0c;也就是一般的页面&#xff0c;…

WordPress Git主题 响应式CMS主题模板

分享的是新版本&#xff0c;旧版本少了很多功能&#xff0c;尤其在新版支持自动更新后&#xff0c;该主题可以用来搭建个人博客&#xff0c;素材下载网站&#xff0c;图片站等 主题特点 兼容 IE9、谷歌 Chrome 、火狐 Firefox 等主流浏览器 扁平化的设计加响应式布局&#x…

MySQL count(*/column)查询优化

count()是SQL中一个常用的聚合函数&#xff0c;其被用来统计记录的总数&#xff0c;下面通过几个示例来说明此类查询的注意事项及应用技巧。 文章目录 一、count()的含义二、count()的应用技巧2.1 同时统计多列2.2 利用执行计划 一、count()的含义 count()用于统计符合条件的记…