如何编码您的第一个Mojo程序

Java教程 2025-08-26

Mojo编程语言是新的。实际上,它仍在开发中。在2023年底,最新的里程碑发行版是0.6.0版。没有关于第一个完整的增量版本何时将进入GA的消息,该语言的最终功能集仍在进行中。

但是,即使在开始的早期状态,Mojo编程语言也已经证明了能够超越其他主要语言,包括Python,C和Rust。

模块化的Mojo编程语言有望彻底改变AI空间中的软件开发。对于那些想保持下一个大型机器学习趋势的人来说,现在是学习如何编写第一个Mojo计划的合适时机。

学习Mojo编程语言基础知识

在本Mojo教程中,我的计划是帮助您构建第一个Mojo计划。

我不是在谈论在Mojo建立一个简单的Hello World节目,尽管这是在案卷上。我的目标是向您展示一个温和的Mojo计划,以完成以下操作:

  • 在隐式和静态上声明变量。

  • 使用具有FNDEF语义的方法。

  • 检查Mojo中有条件的陈述。

  • 在Mojo上介绍一些异常处理的语义。

  • 检查Mojo循环结构的语法。

  • 调用Mojo代码中的Python API。

  • 将pythonobjects转换为文本。

  • 将文本字符串转换为Mojo中的整数。

Mojo数字猜测游戏

所有这些都将通过开发简单的,基于魔力的数字猜测游戏来实现。

这与我写的基于Java的游戏没有什么不同。实际上,Java文章将在Mojo,Python和Java之间进行有趣的比较。

完整的产品

我的哲学之一是,重要的是要在开始编码之旅之前对要去的位置有所了解。因此,我将把购物车放在马上,并向您展示我们将要构建的示例的完整Mojo代码。这里是:

您的第一个Mojo程序实际上将致电Python API。

本教程的其余部分将是该Mojo应用程序从头开始的增量构建。

先决条件

本教程假设您已经安装了Visual Studio,以及Mojo Runtime和Mojo Visual Studio插件。

不需要Visual Studio,因为您可以使用作为MOJO安装的一部分来编译文件并运行该文件。尽管如此,VSCODE肯定会让您更容易。

本Mojo教程还假设您已经在干净的空文件夹中打开了Visual Studio,可以在该文件夹中存储此Mojo示例中使用的代码。

创建您的第一个Mojo文件?

首先,在Visual Studio中创建一个名为number_guesser.mojo的新文件。

如果需要,可以将火焰表情符号用作文件扩展名而不是.mojo扩展名。 Visual Studio中的Mojo插件识别.?(“ dot-flame”)和.mojo。

将火焰表情符号用作文件扩展的能力是Mojo创建者提供的一个有趣的小功能,以增强Mojo与所有其他编程语言有些不同的想法。

Hello World在Mojo

将以下代码添加到您的新文件中,以获取必要的Hello World Mojo应用程序:

 fn main():print(“ Hello Mojo World!”)

运行该程序, Hello Mojo World打印到控制台。

Mojo vs. Python乍一看

Python开发人员可能会注意到Mojo和Python的语法之间的许多相似之处和几个很大的差异。

使Python开发人员感到轻松的相似之处包括以下内容:

  • Mojo附带了一套全面的内置功能,例如打印

  • 代码块通过结肠和凹痕组合来描述。

  • Mojo使用四个空间来缩进;标签是verboten。

  • 最终,代码线不需要半彩色。

  • 文字可以放在单引号和双引号中。

Mojo和Python之间的三个大差异是:

  1. MOJO方法之前的FN序言是新的。 Python开发人员被用来查看DEF

  2. 命令必须进入方法。 Mojo不允许驻留在方法之外的无人看守语句。

  3. python的隐秘如果名称==主语法被正确的主方法替换。

FN与Mojo的Def

Python开发人员将很高兴知道他们实际上可以在这个Hello World示例中将FN更改为DEF ,并且该代码可以正常工作。

Mojo是Python的超集。 Mojo完全支持Python代码。这意味着是的,Mojo支持DEF序言。

这些关键字之间的区别在于,如果您使用FN ,则应承担Mojo所需的更严格的编码要求。选择DEF ,您可以编写您喜欢的任何动态键入的Python代码。

在Mojo中没有无人看守的代码

鉴于其根源是脚本语言,Python不需要在方法中包装语句。在执行文件或导入文件时,在文件的顶部范围中写入的任何代码都将从上到底执行。

这是一个非常重要的Python安全漏洞,即使使用语言的隐秘名称等于主构造,但仍未解决。

在Mojo中,可以在顶级范围中声明变量,但是所有可执行的语句都必须在方法中。

此外,为了与所有基于C的编程语言一致,Mojo使用一种主要方法来表示应用程序的入口点。该名称等于主结构。

如何在Mojo中声明变量

我们正在构建一个猜测游戏,因此我们的程序需要两个变量:

  1. 一个名为the_guess的变量。

  2. 一个名为the_magic_number的变量。

注意:经验丰富的开发人员不会用该变量来预测变量,但是由于这是新手开发人员的第一个程序,因此允许,因为它将有助于增强代码的可读性。无需向我发送这些可变名称选择的任何阴影。

要在Mojo方法中声明局部变量,请按照以下步骤:

  • 使用var关键字指示正在发生变量声明。

  • 提供变量的名称。

  • 可选分配变量一个值。

对于常数,您使用LET关键字。在我们应用程序的这种迭代中,魔术数字将是恒定的,因此我们将使用LET声明。

在删除Hello World Print语句之后,我们更新的方法如下:

 fn main():让the_magic_number = 7 var the_guess = 5

静态与隐式打字

您可能已经听说Mojo是静态键入的,与Python形成了鲜明的对比。

您可能还想知道为什么在声明这些变量时没有指定数据类型。毕竟,大多数静态的语言都要求您指出您是否正在使用浮子,整数,字符串或布尔值。

就像Java一样,在Mojo变量中,方法可以将其类型推断出来,从而使开发人员明确提供类型名称。但是,允许明确打字,并且看起来如下:

 fn main():让the_magic_number:int = 7 var the_guess:int = 5

Mojo Int与Python的Int

Python开发人员可能会注意到, INT有一封领先的大写字母,而在Python中,这都是较低的案例。

Python的Lower-Case Int做了一些有趣的事情,可能与Mojo的某些绩效兴趣相反。不同的资本化为Mojo语言架构师提供了一些摆动房间,因为他们弄清楚如何处理Python的一些全数字特点。

有条件的逻辑

我们需要确定the_guess是较高,较低还是等于the_magic_number ,这需要有条件的语句。

有条件的逻辑从一种编程语言到另一种编程语言的差异不大。毕竟,只有很多方法可以构建一个if .. else语句。

Mojo遵循Python的熟悉语法,以获取有条件的语句,包括Elif以及IF其他关键字。

 fn main():让the_magic_number:int = 7 var the_guess:int = 5如果the_guess  themagicnumber:print(the_guess +“太高!”);否则打印(“你猜对了!”);

以当前状态运行该应用程序,您将获得以下输出:

 5太低了!

您还将收到一些警告消息,因为Mojo不喜欢猜测变量在整个程序过程中不会改变的事实。

Mojo中的V var

标记为恒定和不变的数据与可变的数据有很大不同。当编译器知道给定值是不可变的时,可以应用许多低级优化。

在Mojo中,通过使用LET而不是VAR来识别常数。当我们运行程序时,编译器告诉我们,我们应该使用let for the_guess ,因为它的值确实会改变。我们现在可以驳回此警告,因为我们计划的未来迭代将使_Guess辜负其可变绰号。

如何在Mojo中使用Python

我们应该从用户那里获得它,而不是硬编码the_guess

这需要尚未属于Mojo API的用户输入功能。但是,它们可以从Python API中获得,这正是我们将使用的。

要访问我们的Mojo代码中的Python函数,我们必须在文件顶部添加以下导入:

从Python进口Python作为Impy

然后,我们必须导入所需的功能,并在代码中维护对Python组件的引用:

令py_input = impy.import_module(“内置”)。输入

如何在Python中获取用户输入

现在,我们可以像普通Python程序一样在MOJO代码中使用Python输入函数。

但是,从python中提取的资源作为pythonobject返回。在我们的代码中,我们明确键入从python输入函数返回的数据作为pythonObject ,以使这一事实清楚:

让输入: pythonobject = py_input()

当您从外部库中调用对象时,Mojo会感到有些紧张,因此我们需要在主方法声明中添加ristise关键字,以表明此方法现在可能会在运行时提出一个意外的例外:

 fn main()抬高:

字符串转换为Mojo中的int

PythonObject实现了弦乐特征,因此我们可以轻松访问PythonObject代表的基于文本的值:

令text_input:string = input .__ str __()#convert pythonObject到字符串

一个清洁的选项是将输入传递到str()函数以恢复字符串

令text_input:字符串= str(输入)#convert pythonObject到字符串

然后,我们可以使用ATOL方法将字符串转换为INT

 the_guess = atol(text_input)#convert mojo字符串到int

循环使用Mojo编程语言

为了结束我们的应用程序,我们嵌入了获得输入的逻辑,并评估了guess内部循环中的猜测,以检查是否选择了正确的数字:

 the_magic_number!= the_guess:

在一些打印语句中使用Pepper,以向用户提供反馈,并且您已经完成了第一个Mojo程序!

从python导入python作为impyfn main()加起来:让py_input = impy.import_module(“内置”)。输入让the_magic_number:int = 7 var the_guess:int = 5 print = 5 print = 5 print = a the the_magic_number! text_input : String = str(input) #PythonObject to String the_guess = atol(text_input) #convert String to int in Mojo print("You guessed: " + str(the_guess)) if the_guess <  the_magic_number: print(the_guess + " is too low!") elif the_guess  > theMagicNumber: print(the_guess + " is too high!") else打印(“你猜对了!”););)

您的第一个Mojo程序的输出

当代码运行时,输出如下:

 Spriumtuul@Mojo-Tutearial:〜/ Mojo Number_Guesser.mojo猜测一个数字1至10 2您猜测:2Guess较高!9您猜测:9guess lows!8您猜测:8Guess lose:8guess lower!5您猜测:5GUESS猜测:5Guess higher!

现在您的第一个Mojo申请已完成

就是这样!这就是在Mojo中编程的容易!

对于Python开发人员来说,缠绕您的头确实没有什么难过的。从Java,Rust和C Octothorpe等语言来到人工智能和机器学习世界的开发人员将享受Mojo语言的静态键入性质,更不用说其主要方法了。

在这种新的Mojo编程语言中,这里的每个人都可以喜欢的每个Mojo编程语言。