译者:tt67wq
通过编写“猜数字”游戏来学习 Elixir 编程语言,并将它与一个你熟知的语言做对比。
为了更好的学习一门新的编程语言,最好的方法是去关注主流语言的一些共有特征:
◈变量
◈表达式
◈语句
这些概念是大多数编程语言的基础。因为这些相似性,只要你通晓了一门编程语言,你可以通过对比差异来熟知另一门编程语言。
另外一个学习新编程语言的好方法是开始编写一个简单标准的程序。它可以让你集中精力在语言上而非程序的逻辑本身。在这个系列的文章中,我们使用“猜数字”程序来实现,在这个程序中,计算机会选择一个介于 1 到 100 之间的数字,并要求你来猜测它。程序会循环执行,直到你正确猜出该数字为止。
“猜数字”这个程序使用了编程语言的以下概念:
◈变量
◈输入
◈输出
◈条件判断
◈循环
这是一个学习新编程语言的绝佳实践。
猜数字的 Elixir 实现
Elixir是一门被设计用于构建稳定可维护应用的动态类型的函数式编程语言。它与Erlang运行于同一虚拟机之上,吸纳了 Erlang 的众多长处的同时拥有更加简单的语法。
你可以编写一个 Elixir 版本的“猜数字”游戏来体验这门语言。
这是我的实现方法:
defmodule Guess do
def guess() do
random = Enum.random(1..100)
IO.puts "Guess a number between 1 and 100"
Guess.guess_loop(random)
end
def guess_loop(num) do
data = IO.read(:stdio, :line)
{guess, _rest} = Integer.parse(data)
cond do
guess < num ->
IO.puts "Too low!"
guess_loop(num)
guess > num ->
IO.puts "Too high!"
guess_loop(num)
true ->
IO.puts "That's right!"
end
end
end
Guess.guess()
Elixir 通过列出变量的名称后面跟一个=号来为了给变量分配一个值。举个例子,表达式random = 0给random变量分配一个数值 0。
代码以定义一个模块开始。在 Elixir 语言中,只有模块可以包含命名函数。
紧随其后的这行代码定义了入口函数guess(),这个函数:
◈调用Enum.random()函数来获取一个随机整数
◈打印游戏提示
◈调用循环执行的函数
剩余的游戏逻辑实现在guess_loop()函数中。
guess_loop()函数利用尾递归来实现循环。Elixir 中有好几种实现循环的方法,尾递归是比较常用的一种方式。guess_loop()函数做的最后一件事就是调用自身。
guess_loop()函数的第一行读取用户输入。下一行调用parse()函数将输入转换成一个整数。
cond表达式是 Elixir 版本的多重分支表达式。与其他语言中的if/elif或者if/elsif表达式不同,Elixir 对于的首个分支或者最后一个没有分支并没有区别对待。
这个cond表达式有三路分支:猜测的结果可以比随机数大、小或者相等。前两个选项先输出不等式的方向然后递归调用guess_loop(),循环返回至函数开始。最后一个选项输出That's right,然后这个函数就完成了。
输出例子
现在你已经编写了你的 Elixir 代码,你可以运行它来玩“猜数字”的游戏。每次你执行这个程序,Elixir 会选择一个不同的随机数,你可以一直猜下去直到你找到正确的答案:
$ elixir guess.exs
Guess a number between 1 and 100
50
Too high
30
Too high
20
Too high
10
Too low
15
Too high
13
Too low
14
That's right!
“猜数字”游戏是一个学习一门新编程语言的绝佳入门程序,因为它用了非常直接的方法实践了常用的几个编程概念。通过用不同语言实现这个简单的小游戏,你可以实践各个语言的核心概念并且比较它们的细节。
你是否有你最喜爱的编程语言?你将怎样用它来编写“猜数字”这个游戏?关注这个系列的文章来看看其他你可能感兴趣的语言实现。
via:
作者:Moshe Zadka选题:lujun9972译者:tt67wq校对:wxy
本文由LCTT原创编译,Linux中国荣誉推出
欢迎遵照 CC-BY-NC-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。
香奈儿premire腕表与ultra手链广告大片,我想着我的渺小,有些战栗起来;清福究竟也不容易享的
多明尼克-伊瑟曼,于法国高等师范学校学校取得法国文学与英国文学的双学士学位,凭著兴致自学的取景技法,固然投身取景办公和亲族对她的期望绝对南辕北辙,不过她明白自..
⋅ 作者:admin |
雅诗兰黛dw粉底液使用方法,雅诗兰黛dw粉底液有隔离防晒效果吗
雅诗兰黛dw粉底液有隔离防晒效果吗 这是美版的雅诗兰黛dw粉底液,不含防晒值。美版的雅诗兰黛DW粉底液是基于欧美的皮肤需求,不具备防晒效果,主要作用是遮瑕。
⋅ 作者:admin |
里季是什么品牌?里季精华“不含防腐剂”涉嫌虚假宣传,“10万平工厂”实为代工厂?
里季精华“不含防腐剂”涉嫌虚假宣传,“10万平工厂”实为代工厂?,工厂,防腐剂,化妆品,精华液,护肤品,里季精华,消费者报道
⋅ 作者:admin |
美人计|刘嘉玲的化妆台才是女明星该有的样子啊!女明星们平常用的化妆品真的是那些接地气的平价款?
东西好不好用单说,但在天天到处飞、拍夜戏、还被大灯烤的高压环境下,我真的不相信她们平常只靠着几瓶二百来块钱的护肤品来护肤。
⋅ 作者:admin |
想要素颜能打 一定不能有黑眼圈,馥蕾诗红茶紧致修护眼部精华霜
内含NARS独有的聚光复合物Light Reflecting ComplexTM,能令肌肤恢复青春光彩,闪耀裸光光泽。
⋅ 作者:admin |