ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

从零上手:在Linux环境下用Scala REPL与scalac完成你的第一个编程实验

从零上手:在Linux环境下用Scala REPL与scalac完成你的第一个编程实验 1. 环境准备搭建Scala开发环境在Linux系统上搭建Scala开发环境其实比你想象中简单。我推荐使用Ubuntu系统因为它的软件仓库维护得比较好安装依赖特别方便。先别急着安装Scala我们需要先搞定Java环境——Scala毕竟是运行在JVM上的语言。打开终端先更新软件包列表是个好习惯sudo apt update接着安装Java开发工具包JDK。我建议直接安装OpenJDK 11这是目前最稳定的LTS版本sudo apt install openjdk-11-jdk安装完成后验证一下Java是否安装成功java -version看到类似openjdk 11.0.xx的输出就说明Java环境OK了。接下来安装Scala本身Ubuntu仓库里的版本可能比较旧我们可以直接从Scala官网下载最新版。不过对于初学者来说用apt安装的版本已经够用了sudo apt install scala安装完成后输入scala -version应该能看到版本信息。我这里安装的是Scala 2.11.12虽然不算最新但对于学习基本语法完全够用。如果你需要特定版本可以考虑使用sbt或者手动下载安装包配置环境变量。2. 初识Scala REPL交互式编程体验第一次接触REPLRead-Eval-Print Loop可能会让你想起Python的交互式环境但Scala的REPL功能更强大。直接在终端输入scala就能进入这个神奇的环境scala你会看到欢迎信息和scala提示符。这里就像个即时演算的草稿纸我经常用它来快速测试代码片段。比如试试最基本的表达式1 1REPL会立即显示结果res0: Int 2。这里的res0是REPL自动生成的变量名你可以直接用它进行后续计算res0 * 3REPL支持多行输入按回车不会立即执行这在写复杂表达式时特别有用。试试定义一个函数def greet(name: String) { println(sHello, $name!) }然后调用它greet(Scala新手)REPL最棒的地方在于它能自动补全代码。输入greet.然后按Tab键你会看到这个函数所有可用的方法。想退出REPL时输入:quit或者按CtrlD就行。3. 编写第一个Scala脚本计算级数现在我们来完成一个实际任务计算级数直到和超过给定值q。这个例子很好地结合了基础语法和算法思维。首先创建个工作目录mkdir ~/scala_projects cd ~/scala_projects用你喜欢的文本编辑器创建文件series.scala我习惯用vimvim series.scala输入以下代码object SeriesCalculator { def main(args: Array[String]): Unit { println(请输入目标值q:) val q scala.io.StdIn.readDouble() var sum 0.0 var i 1.0 while(sum q) { sum i / (i 1) i 1 } println(s达到或超过$q的最小和是: $sum) println(s使用了前${i.toInt - 1}项) } }这段代码做了几件事从用户输入读取目标值q初始化求和变量sum和计数器i使用while循环不断累加项直到sum ≥ q最后输出结果和使用的项数保存文件后我们可以直接用scala命令运行脚本不需要先编译scala series.scala输入50你应该能看到类似这样的输出达到或超过50.0的最小和是: 50.416695 使用了前99项4. 使用scalac编译与运行虽然直接运行脚本很方便但正式项目通常需要编译成.class文件。让我们用scalac编译器来处理scalac series.scala这会生成SeriesCalculator.class等文件。要运行编译后的程序scala SeriesCalculator注意这里直接使用object名而不是文件名。编译运行和脚本运行的主要区别在于编译后执行速度更快可以生成可重用的类文件适合大型项目分模块开发如果你想清理编译生成的文件rm *.class5. 调试技巧与常见问题刚开始用Scala编程难免会遇到问题。这里分享几个我踩过的坑和解决方法问题1权限不足如果在保存或执行文件时报权限错误记得给文件添加执行权限chmod x series.scala问题2Java版本冲突如果遇到奇怪的JVM错误检查默认Java版本update-alternatives --config java问题3REPL中的多行输入在REPL中输入多行代码时如果发现无法退出输入状态可以连续按两次回车或者输入:reset重新开始。调试技巧在代码中插入println是最简单的调试方法对于复杂逻辑可以现在REPL中测试片段使用try-catch块捕获异常try { // 可能出错的代码 } catch { case e: Exception println(s出错了: ${e.getMessage}) }6. 扩展练习提升你的Scala技能掌握了基础之后可以尝试这些扩展练习来巩固知识练习1函数式实现用递归函数替代while循环实现相同的级数计算。函数式风格是Scala的重要特性def calculate(q: Double, i: Double 1, sum: Double 0): Double { if(sum q) sum else calculate(q, i 1, sum i/(i 1)) }练习2格式化输出改进输出格式比如限制小数位数println(f结果: $sum%.4f)练习3参数化公式让级数的计算公式可以通过参数传入提高代码复用性def computeSeries(q: Double, formula: Double Double): Double { // 实现代码 }练习4性能测试比较while循环和递归实现的性能差异可以用System.nanoTime测量执行时间。7. 项目结构与最佳实践当你的Scala代码越来越复杂时需要关注项目结构。虽然我们这次只用了一个文件但正规项目应该这样组织my_project/ src/ main/ scala/ com/ yourname/ Main.scala utils/ MathUtils.scala build.sbt一些好的编码习惯使用immutable变量val优先于mutable变量var为函数和变量取有意义的名称保持函数短小精悍最好不超过20行写注释解释复杂的逻辑使用模式匹配代替复杂的if-else链8. 下一步学习建议完成这个入门实验后你可能对Scala产生了兴趣。我推荐这些学习资源官方文档https://docs.scala-lang.org/《Scala编程》第三版Martin Odersky著Coursera上的Scala函数式编程课程Scala Exercises网站交互式学习在实际项目中你可能会用到这些工具sbtScala标准构建工具IntelliJ IDEA with Scala插件强大的IDE支持Ammonite增强版Scala REPL记住学习Scala最好的方式就是多写代码。可以从解决一些算法问题开始逐步尝试构建小型应用。Scala的混合范式面向对象函数式可能需要时间适应但一旦掌握你会爱上它的表达力和灵活性。
返回列表