不同编程语言是如何完成同一件事

更新日期: 2022-06-09阅读: 924标签: 语言

通过一个简单的小游戏比较 13 种编程语言。

当我开始学习一种新的编程语言时,会把重点放在定义变量、书写声明以及计算表达式,一旦对这些概念有一个大致的了解,通常就能够自己弄清剩下的部分。大多数编程语言都具有相似性,所以如果你掌握了一种编程语言,学习下一种语言的重点就是弄清楚独有的概念以及区分不同。

我喜欢写一些测试程序来帮助练习新的编程语言。其中我经常写的是一个叫做“猜数字”的小游戏,计算机选出 1 到 100 里的任一数字,然后我来猜。程序循环进行,直到猜出正确数字。通过伪代码可以看出,这是个非常简单的程序:

  • 计算机在 1 到 100 之间选出一个随机数字
  • 循环进行直到猜出该随机数字
  • 计算机读取我的猜测
  • 告诉我我的猜测过高还是过低

我们发表了一些文章,用不同的语言写这个程序。这是一个比较不同语言做同样事情的有趣机会。大多数编程语言具有相似性,所以当你在学习下一种新的编程语言时,主要是学习它的独特之处。

C 语言由 Dennis Ritchie 于 1972 年在贝尔实验室创建,是一种早期的通用编程语言。C 语言非常受欢迎,并迅速成为

Unix 系统上的标准编程语言。正是因为它的流行,许多其他编程语言也采用了类似的编程语法。这就是为什么如果你已经知道如何使用 C 语言编程,学习

C++、Rust、Java、Groovy、JavaScript、awk 或 Lua 会更容易。

接下来我们看看这些不同的编程语言是如何实现 “猜数字” 游戏的主要步骤。我将把重点放在基本元素的相似或不同,跳过一些外围代码,如分配临时变量。


计算机在 1 到 100 之间选出一个随机数字

你可以看到这里有许多相似之处。大多数编程语言使用类似  rand()  的函数,你可以设定一个范围来生成随机数。而其他一些语言使用一个特殊的函数来设定范围生成随机数。

C:

// Using the Linux `getrandom` system call
    getrandom(&randval, sizeof(int), GRND_NONBLOCK);
    number = randval % maxval + 1;
    // Using the standard C library
    number = rand() % 100 + 1;

C++:

int number = rand() % 100+1;

Rust:

let random = rng.gen_range(1..101);

Java:

private static final int NUMBER = r.nextInt(100) + 1;

Groovy:

int randomNumber = (new Random()).nextInt(100) + 1

JavaScript:

const randomNumber = Math.floor(Math.random() * 100) + 1

awk:

randomNumber = int(rand() * 100) + 1

Lua:

number = math.random(1,100)


循环进行直到我猜出该随机数字

循环通常是用控制流程来实现的,如  while  或  do-while 。JavaScript 中的实现没有使用循环,而是 “实时 ”更新 html 页面,直到用户猜出正确的数字。Awk 虽然支持循环,但是通过循环读取输入信息是没有意义的,因为 Awk 是基于数据管道的,所以它从文件而不是直接从用户读取输入信息。

C:

do {
        …
} while (guess != number);

C++:

do {
        …
} while ( number != guess );

Rust:

for line in std::io::stdin().lock().lines() {
        …
        break;
}

Java:

while ( guess != NUMBER ) {
        …
 }

Groovy:

while ( … ) {
        …
        break;
}

Lua:

while ( player.guess ~= number ) do
        …
    end


计算机读取我的猜测

不同编程语言对输入的处理方式不同。例如,JavaScript 直接从 HTML 表单中读取数值,而 Awk 则从数据管道中读取数据。

C:

scanf("%d", &guess);

C++:

cin >> guess;

Rust:

let parsed = line.ok().as_deref().map(str::parse::<i64>);
    if let Some(Ok(guess)) = parsed {
        …
    }

Java:

guess = player.nextInt();

Groovy:

response = reader.readLine()
    int guess = response as Integer

JavaScript:

let myGuess = guess.value

Awk:

guess = int($0)

Lua:

player.answer = io.read()
    player.guess = tonumber(player.answer)


告诉我猜测过高还是过低

在这些类 C 语言中,通常是通过  if  语句进行比较的。每种编程语言打印输出的方式有一些变化,但打印语句在每个样本中都是可识别的。

C:

if (guess < number) {
        puts("Too low");
    }
    else if (guess > number) {
        puts("Too high");
    }
    …
    puts("That's right!");

C++:

if ( guess > number) { cout << "Too high.\n" << endl; }
    else if ( guess < number ) { cout << "Too low.\n" << endl; }
    else {
        cout << "That's right!\n" << endl;
        exit(0);
    }

Rust:

_ if guess < random => println!("Too low"),
    _ if guess > random => println!("Too high"),
    _ => {
        println!("That's right");
        break;
    }

Java:

if ( guess > NUMBER ) {
        System.out.println("Too high");
    } else if ( guess < NUMBER ) {
        System.out.println("Too low");
    } else {
        System.out.println("That's right!");
        System.exit(0);
    }

Groovy:

if (guess < randomNumber)
        print 'too low, try again: '
    else if (guess > randomNumber)
        print 'too high, try again: '
    else {
        println "that's right"
        break
    }

JavaScript:

if (myGuess === randomNumber) {
        feedback.textContent = "You got it right!"
    } else if (myGuess > randomNumber) {
        feedback.textContent = "Your guess was " + myGuess + ". That's too high. Try Again!"
    } else if (myGuess < randomNumber) {
        feedback.textContent = "Your guess was " + myGuess + ". That's too low. Try Again!"
    }

Awk:

if (guess < randomNumber) {
        printf "too low, try again:"
    } else if (guess > randomNumber) {
        printf "too high, try again:"
    } else {
        printf "that's right\n"
        exit
    }

Lua:

if ( player.guess > number ) then
        print("Too high")
    elseif ( player.guess < number) then
        print("Too low")
    else
        print("That's right!")
        os.exit()
    end


非类 C 编程语言会怎么样呢?

非类 C 编程语言会有很大的不同,需要学习特定的语法来完成每一步。Racket 源于 Lisp 和 Scheme,所以它使用 Lisp

的前缀符和大量括号。Python 使用空格而不是括号来表示循环之类的块。Elixir 是一种函数式编程语言,有自己的语法。Bash 是基于

Unix 系统中的 Bourne shell,它本身借鉴了 Algol68,并支持额外的速记符,如  &&  作为  and  的变体。Fortran 是在使用打孔卡片输入代码的时期创建的,所以它依赖于一些重要列的 80 列布局。

我将通过比较  if  语句,举例表现这些编程语言的不同。 if  判断一个值是否小于或大于另一个值,并向用户打印适当信息。

Racket:

(cond [(> number guess) (displayln "Too low") (inquire-user number)]
        [(< number guess) (displayln "Too high") (inquire-user number)]
        [else (displayln "Correct!")]))

Python:

if guess < random:
        print("Too low")
    elif guess > random:
        print("Too high")
    else:
        print("That's right!")

Elixir:

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

Bash:

[ "0$guess" -lt $number ] && echo "Too low"
    [ "0$guess" -gt $number ] && echo "Too high"

Fortran:

IF (GUESS.LT.NUMBER) THEN
        PRINT *, 'TOO LOW'
    ELSE IF (GUESS.GT.NUMBER) THEN
        PRINT *, 'TOO HIGH'
    ENDIF


更多

当你在学习一种新的编程语言时 “猜数字” 游戏是一个很友好的入门程序,通过一种简单的方式练习了几个常见的编程概念。通过不同编程语言实现这个简单游戏,你可以理解一些核心概念和每种语言的细节。

来源: Linux中国

链接: https://fly63.com/article/detial/11694

vue.js实现多语言_vue.js国际化 vue-i18n插件的使用

在项目开发中遇到需要多语言的支持,在Vue项目中有对应的组件vue-i18n,而且对项目的代码修改不大.这篇文章讲解vue-i18n的安装和使用,语言包的生成 & 替换项目中原有的静态文本

web网页多语言的实现方案_前端实现多语言切换

需要在web中实现多语言的切换,当用户语言切换完成后下次重新打开网页,也是上次设置的语言进行显示。在用户点击切换语言后,把选择的语言版本保存在cookie中;定义语言的标识+内容的json字符串

JavaScript中的黑话

因为球是圆的,所以不论发生什么都有可能,对这点我是深信不疑的,但最近我总是在怀疑,JavaScript也是圆的!本文带你细数JavaScript的黑话,因为这一切是多么的有趣,又是多么的无意义,就如这世界一般,很多事情只有当你了解过,才能做出错误的选择。

10个编译为JavaScript的语言

你不用写一行Javascript或者考虑这种语言的局限,就能生产在浏览器能运行的代码。这篇文章包括了十种有趣的语言能够编译为Javascript,在浏览器或者Node.js中被执行

这三个新特性可能改变JavaScript未来

你想不想知道下一波令人兴奋无比的 JavaScript 特性?你甚至都不知道自己需要这些特性。现在,我要向你展示三个可能会改变你编写 JavaScript 代码方式的提案。这些提案中有很多方面仍未最终确定。

7种主流编程语言的优点和缺点对比

7种主流编程语言:Python需要拿着游标卡尺学习的语言 ,C/C++大多数中国程序员的第一个语言 ,Java最长寿的语言 ,C#自称不是 Java 的 Java 语言 ,JavaScript 不是 Java 语言的语言 ,SQL数据库离不开的语言 ,PHP 世界上最好的语言

JavaScript 的现状_以及对 JavaScript 的批评有哪些呢?

JavaScript 已经成为了一门一流的编程语言,使用 JavaScript 的程序员们正变得无所不能。质疑 JavaScript 是否是一种「真正的」编程语言的时代已经过去,现在的问题是,你有没有准备好投入到这门语言中,进行真正的学习。

学习编程开发_如何学习并掌握一门计算机编程语言

如果你有兴趣编写计算机程序,移动APP,网站,游戏或者任何软件,你应该学习编程。编程语言撰写的代码构建了计算机的程序。无论对于何种计算机编程语言,其核心编程思想都是一样的

前端国际化的另类方式

一个项目发展到一定的环境或者一开始就是为多国打造的,就需要考虑国际化了。简单来说,就是一套页面,多套语言。主要探讨了两种完全不同的国际化方式,前一种主流,后一种完全属于另类,但还是有用武之地的。如果你的页面不太复杂,完全可以采取这种方式。

编程语言排行榜

对于程序员来说,选择一门适合自己,适合职业发展的编程语言也是同等重要。各大编程语言的受欢迎程度、学习的人群数量,以及由于人工智能的兴起,最热门的编程语言排行榜也发生了变化。让我们来看看。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!