中文代码示例之 Programming in Scala 笔记第四五六章

2018-11-16 17:03:52 +08:00
 xuanwu

中文编程知乎专栏原文: https://zhuanlan.zhihu.com/p/50093833

节选:

第六章 功能对象

此章的例子与之前的"初步尝试将传统学科的内容程序 /数据化"有些共鸣, 以后的数学知识部分可以参考此实现.

class 有理数(分子: Int, 分母: Int) {
  require(分母 != 0)
  private val 公约数 = 最大公约数(分子.abs, 分母.abs)

  val 分子值: Int = 分子 / 公约数
  val 分母值: Int = 分母 / 公约数

  def this(数: Int) = this(数, 1)

  def + (数: 有理数): 有理数 =
    new 有理数(
      分子值 * 数.分母值 + 数.分子值 * 分母值,
      分母值 * 数.分母值
    )

  def + (数: Int): 有理数 =
    new 有理数(分子值 + 数 * 分母值, 分母值)

  def - (数: 有理数): 有理数 =
    new 有理数(
      分子值 * 数.分母值 - 数.分子值 * 分母值,
      分母值 * 数.分母值
    )

  def - (数: Int): 有理数 =
    new 有理数(分子值 - 数 * 分母值, 分母值)

  def * (数: 有理数): 有理数 =
    new 有理数(分子值 * 数.分子值, 分母值 * 数.分母值)

  def * (数: Int): 有理数 =
    new 有理数(分子值 * 数, 分母值)

  def / (数: 有理数): 有理数 =
    new 有理数(分子值 * 数.分母值, 分母值 * 数.分子值)

  def / (数: Int): 有理数 =
    new 有理数(分子值, 分母值 * 数)

  override def toString = 分子值 + "/" + 分母值
  
  private def 最大公约数(甲: Int, 乙: Int): Int =
    if (乙 == 0) 甲 else 最大公约数(乙, 甲 % 乙)
}
1772 次点击
所在节点    分享创造
4 条回复
Resource
2018-11-16 17:06:14 +08:00
累不累
sherylynn
2018-11-16 17:09:20 +08:00
我觉得如果是面向中文产出的小项目,用中文编程还行,直接一对一,比如输出 excel
xuanwu
2018-11-17 02:02:18 +08:00
@sherylynn 嗯, 这些小项目应该是通过中文命名投入产出比最高的. 代码可读性提高又使自己的维护和改进省力很多. 专栏里之前写过一些 python 小工具 /浏览器插件, 都是中文命名.
kaka2019
2018-11-17 09:08:16 +08:00
累不累

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/508580

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX