博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Julia 快速入门
阅读量:6457 次
发布时间:2019-06-23

本文共 3669 字,大约阅读时间需要 12 分钟。

本作品采用进行许可。

Julia 是一个新的适用于科学计算、数据可视化、教学及研究、机器学习等方面的语言。笔者推测绝大多数想要学习 Julia 的读者,除了少数极客是为了好玩儿这个目的之外,都是想要代替他们曾经用 MATLAB、R、C/C++、Python 甚至 Perl 和 Lisp 完成的那些工作。

Julia 正是一个集百家之长的语言,这听起来有点儿像 Rust。笔者曾长时间使用 Rust 代替过去在 MATLAB 和 C/C++ 中完成的工作,不过 Rust 语法更接近 C/C++ 甚至比它们的语法更严谨一些。这对于要从事科学计算、数学可视化及教学等工作的人来说可不太友好——因为你要驾驶的是飞机而不是自行车,你不能无时无刻关注那些琐碎细节——当然如果你拥有庞大的程序员团队,并且对 Julia 已经非常接近 C 的运行速度仍不满意,那么随你高兴。

在学习 Julia 之前你可能有这样的问题:“我的程序在 MATLAB/Python/R 或者别的什么语言中已经运转的很好了,为什么我还要学习 Julia?”这里只要你还记得斯图尔特·布兰特说过:“一旦一种新技术开始滚动碾压道路,如果你不能成为压路机的一部分,那么你就只能成为道路的一部分。”基于这种情况,让我们开始摇滚吧!

为了照顾绝大多数读者的手头情况,笔者在说明一些操作细节都假设您使用的是 Windows 系统。笔者推测大部分类 Unix 系统用户对这些操作都已经烂熟于心。当然这也基于笔者手头实在没有另一台多于的电脑来运行 Linux。同时笔者已经懒惰[1]到了不想点击虚拟机的图标。(笑)

[1]:懒惰被认为是程序员三大美德之一。得益于 Julia、Perl 和 Rust 三个语言,笔者懒散这个毛病不仅没有得到控制反而愈演愈烈,甚至可以说“登峰造极”。(笑)

前期准备

俗话说巧妇难为无米之炊,您首先要下载好 Julia 并把它安装到您的计算机上。您可以通过官网下载到 Julia。网址是:

如果您在 Windows 上使用 Julia 并且想通过 cmd 进入,那么不要忘记设置环境变量。

此外还有一些笔者想要告诉您的额外资料

  • 官方文档:巨细靡遗的语法手册()
  • Juno:一个不错的 IDE,笔者身边的不少开发者在使用()
  • 其他 IDE/编辑器支持:包括了 VS Code、Notepad++、Sublime Text 在内的不少 IDE 及编辑器支持()
  • JuliaBox:一个在浏览器里运行的 Julia,如果您有 GitHub、Google 或 LinkedIn 账号的话可以在线把玩()

如果您已经安装好了 Julia 不妨试试交互式会话(REPL)只需要双击 Julia 图标就可以进入交互式会话,当然您也可以从 cmd 进入。输入 println("hello, world") 并键入回车查看结果。如果顺利的话 cmd 中会显示 hello, world,不妨试试您的母语,譬如就笔者的情况而言:println("你好,世界")。会在 cmd 中显示 你好,世界,不过值得注意的是一些语言的括弧和引号和英语中的并不相同,那么这是不能被接受的。这里有一个须知,即您必须使用英文输入法输入括弧和引号的部分。当然对于大多数人来说这已不算什么新鲜事儿。

开始摇滚吧

学习一个语言往往非常简单,特别是您有别的什么语言的基础的情况下——您只需要在新的语言中怎么写语句就可以了。绝大多数程序员会把结构控制当做程序的基础,事实也的确是这样。当然 Julia 里面还有一些关于命令式、面向对象及函数式的部分。我们现在先把 Julia 编程范式,特别是函数式编程晾在一边儿。(笑)毕竟如果没有例子学习范式不仅无趣而且有一点儿像单纯扯概念。那么我们先来学 Julia 中的结构控制——即怎么写分支、循环和一些别的东西。

很多有经验的程序员只需要看这一部分就可以掌握绝大多数语法,所以笔者把这一部分写在最前面。如果您不能理解以下的内容,请不要着急,我们以后会对这些细节逐一讲解。

变量与赋值

尝试这样的程序

foo = 42 # 这是一个数show(foo)bar = "https://github.com/3442853561" # 这是一个字符串show(bar)

您可以直接在交互式会话中尝试,也可以把以上程序保存成以 .jl 为后缀名的文件。譬如 test.jl。然后在保存路径打开 cmd 输入 julia test.jl 并键入回车。就会看到

42"https://github.com/3442853561"

这和交互式会话的显示方式有一些不同,如果您觉得这样不够好,可以尝试:

foo = 42 # 这是一个数println(foo)bar = "https://github.com/3442853561" # 这是一个字符串println(bar)

这会显示:

42https://github.com/3442853561

不过交互式会话的运行同样的内容看起来没有什么特别的不同。此外退出交互式会话的方式是调用结束函数 exit(),如果觉得这很麻烦的话可以同时按下键盘上的 CtrlD 键。之后笔者为了偷一点儿懒儿会主要使用保存一个文件这种方式运行——这样我就不需要频繁地输入 exit() 了,而且更方便把结果复制到别处——特别是我正在写作的教程。推荐您也这样做——基于能够分享给别人代码这种目的。

条件表达式

所谓条件表达式也就是分支结构。譬如你不知道两个数谁大谁小这种情况。譬如一些理所当然的情况:

if 0 < 1    println("这是当然")end

当然写得复杂一点儿也是可以的:

if 0 < 1    println("这是当然")else    println("这并不可能")end

这看起来没什么用——因为我们还没学循环。

循环

这里只讲一种最简单的循环的写法——您可以让的循环指定的次数,至于迭代器我们以后再讲。譬如说

for i in 1:5    println(i)end

这是从1循环到5的意思。当然这里的循环变量是 i。配合我们之前介绍过的条件表达式就可以写出来计算从1974年到2018年期间的所有闰年了。

for i ∈ 1974:2018    if i % 4 == 0 && i % 100 ≠ 0        println(i)    elseif i % 400 == 0         println(i)    endend

这里需要注意 Julia 接受 表示不等于,当然如果您不方便输入这个符号可以像其他语言那样使用 != 代替。此外在循环中也可以用 这个符号,当然如果不方便输入可以写成 in=

函数与异常

我们一般用关键字 function 来定义函数,譬如:

function 斐波那契(x)    if x < 0        throw(DomainError(x, "参数不能小于0"))    elseif x < 2        return 1    else        return 斐波那契(x - 1) + 斐波那契(x - 2)    endendfor i ∈ 0:10    println(斐波那契(i))end

这里有一些新内容。您可以使用汉字作为标识符——函数名、变量名一类东西。如果您的母语使用西里尔字母也是可以的,进一步说支持了绝大多数人的母语编程这其中还包括了日语、韩语等一些语言的符号。具体的命名规则我们后续会进一步说明。Julia 不仅仅支持用数学符号编程还支持了母语编程,这样使得讲解一些不以编程本身为核心内容的课程时更加容易。同时因为 Julia 可以免费获取并且有接近于 C 的运行速度,在笔者讲解数字图像处理内容时就逐步用 Julia 代替 MATLAB。

另一个新的内容则是异常,我们在以后会将如何处理异常。不过在这里我们先来讲解如何抛出异常,您可以通过 throw 函数来抛出一个异常,正如示例中那样。这里说一句题外话,也许对您编程有帮助——特别是如果您涉及混合语言工程的时候。一般来说异常处理有两种形式即像 Rust 那样返回值或者同 Julia 这样抛出异常。

思考与探究

在这一部分我们快速的讲解了一下 Julia 的主要语法并且介绍了一些令人叹为观止的特性。不过同 Julia 摇滚来说还相差甚远——现在看起来有一点儿像是满地打滚儿。(笑)那么不妨来思考一下这个问题:设计一个函数让函数返回一个年份是否为闰年,当然要验证年份的合理性,我们只认为1970年到2038年期间是合理的年份,当然这是32位系统内置时间的范围。然后输出您出生年份到今年之间的所有平年。当然如果您生于1970年之前,那么可以适当地把认为合理的年份时间往前调整到您出生的年份。

本文首发于刘祺的(微信)公众号

转载地址:http://xmizo.baihongyu.com/

你可能感兴趣的文章
oracle报1405,【案例】Oracle报错ORA-15054 asm diskgroup无法mount的解决办法
查看>>
linux 脚本map,Linux Shell Map的用法详解
查看>>
如何在linux系统下配置共享文件夹,如何在windows和Linux系统之间共享文件夹.doc
查看>>
linux操作系统加固软件,系统安全:教你Linux操作系统的安全加固
查看>>
linux中yum源安装dhcp,24.Linux系统下动态网络源部署方法(dhcpd)
查看>>
ASP.NET性能优化之分布式Session
查看>>
TaffyDB Introduction
查看>>
转载:《TypeScript 中文入门教程》 16、Symbols
查看>>
JavaScript、jQuery、HTML5、Node.js实例大全-读书笔记4
查看>>
C#技术------垃圾回收机制(GC)
查看>>
漫谈并发编程(三):共享受限资源
查看>>
【转】github如何删除一个仓库
查看>>
Linux系统编程——进程调度浅析
查看>>
大数据Lambda架构
查看>>
openCV_java 图像二值化
查看>>
状态模式
查看>>
删除CentOS / RHEL的库和配置文件(Repositories and configuraiton files)
查看>>
DJANGO变动库的一次真实手动经历
查看>>
VC++获得微秒级时间的方法与技巧探讨(转)
查看>>
HDOJ-1010 Tempter of the Bone
查看>>