首頁  >  文章  >  web前端  >  10 個 有趣的 JavaScript 的腳本語言

10 個 有趣的 JavaScript 的腳本語言

小云云
小云云原創
2017-12-05 10:35:114370瀏覽

我們都知道JavaScript並不是實現所有任務的最佳語言,當我們遇到複雜的應用程式時,它可能就不太適合。為了避免這個問題,已經創建了幾種新的語言和現有語言的變體,它們都產生可以在瀏覽器中運行的程式碼,而無需編寫任何JavaScript程式碼,也不用考慮語言的限制。

Dart 是一種經典的物件導向語言,其中所有事物都是對象,任何物件都是類別的實例(物件也可以充當函數)。它專門用於建立瀏覽器、伺服器和行動裝置的應用程式。它由Google維護,並且是 驅動下一代 AdWords 用戶界面的語言 , 而 AdWords 是為谷歌創造收入的最重要的產品,這本身就是在證明其大規模的力量。

該語言可翻譯成 JavaScript ,以便在瀏覽器中使用,或由 Dart VM 直接解釋執行,這也允許你建立伺服器應用程式。可以使用 Flutter SDK 建立行動應用程式。

複雜的應用程式還需要一組成熟的程式庫和專門為此任務而設計的語言特性,而 Dart 包含所有這些程式庫和特性。一個流行的函式庫的例子是 AngularDart ,Angular 的 Dart 版本。

它允許你編寫類型安全的程式碼,而不會太有侵入性;你可以寫類型,但你不需要這樣做,因為它們可以被推斷出來。這允許創建快速原型,而不必過度考慮細節,但一旦你的原型可以工作,你可以添加類型以使其更加健壯。

關於虛擬機器中的並發編程,Dart 使用所謂的 Isolates 連同它們自己的記憶體堆,來代替共享記憶體線程(Dart 是單線程的),使用訊息實現通訊。 在瀏覽器中,這個事件稍有不同:你並不是創造新的 isolates, 而是創造新的 Workers 。

// Example extracted from dartlang.org

import 'dart:async';
import 'dart:math' show Random;

main() async {
  print('Compute π using the Monte Carlo method.');
  await for (var estimate in computePi()) {
    print('π ≅ $estimate');
  }
}

/// Generates a stream of increasingly accurate estimates of π.
Stream<double> computePi({int batch: 1000000}) async* {
  var total = 0;
  var count = 0;
  while (true) {
    var points = generateRandom().take(batch);
    var inside = points.where((p) => p.isInsideUnitCircle);
    total += batch;
    count += inside.length;
    var ratio = count / total;
    // Area of a circle is A = π⋅r², therefore π = A/r².
    // So, when given random points with x ∈ <0,1>,
    // y ∈ <0,1>, the ratio of those inside a unit circle
    // should approach π / 4. Therefore, the value of π
    // should be:
    yield ratio * 4;
  }
}

Iterable<Point> generateRandom([int seed]) sync* {
  final random = new Random(seed);
  while (true) {
    yield new Point(random.nextDouble(), random.nextDouble());
  }
}

class Point {
  final double x, y;
  const Point(this.x, this.y);
  bool get isInsideUnitCircle => x * x + y * y <= 1;
}

 

 開始使用Dart

TypeScript

TypeScript 是JavaScript 的超集;有效的JavaScript 程式也是有效的TypeScript 程序,但後者添加了靜態類型。其編譯器也可以充當從 ES2015+ 到目前實現的轉譯器,所以你總是可以獲得最新的功能。

不同於許多其他語言,TypeScript 保持 JavaScript 的精神完好無損,只增加了功能來提高程式碼的可靠性。這些是類型註釋,以及其他類型相關的功能,使得編寫 JavaScript 更加愉快,這得益於啟用了靜態分析器等專門的工具來幫助重構過程。另外,類型的新增改進了應用程式不同元件之間的介面。

類型推斷受到支持,因此你不必從一開始就寫所有的類型。你可以編寫快速解決方案,然後添加所有的類型以獲取對程式碼的信心。

TypeScript 也支援進階的類型,如 intersection(交集) 類型 、 union(並集、聯合) 類型、 類型別名、 可區分聯合(discriminated union)和類型保護。你可以在 TypeScript 文件 網站的 進階類型 頁面中查看所有這些類型。

如果你使用 React,則也可以透過新增 React 類型來支援 JSX。

class Person {
    private name: string;
    private age: number;
    private salary: number;

    constructor(name: string, age: number, salary: number) {
        this.name = name;
        this.age = age;
        this.salary = salary;
    }

    toString(): string {
        return `${this.name} (${this.age}) (${this.salary})`;
    }
}

 

Elm 是一種純粹的函數程式語言,它編譯成 JS、 HTM L和 CSS。 你可以只使用 Elm 建立一個完整的網站。這使得之成為 JavaScript 框架如 React 的一個很好的替代方案。用它建立的應用程式會自動使用虛擬 DOM 庫,使其速度非常快。其一大優點是內建的體系結構,它使你忘記了資料流,而將重點放在資料聲明和邏輯上。

在 Elm 中,所有函數都是純粹的,這意味著它們將總是對給定輸入返回相同的輸出。除非你指定,否則它們不能做任何其他事情。例如,為了存取遠端 API,你將建立 command (命令)函數來與外界通信,並建立 subscription (訂閱)以偵聽回應。純粹性的另一點是,值是不可變的;當你需要某樣東西時,你會建立新值,而不是修改舊值。

Elm 的採用可以是漸進式的;可以使用 ports (連接埠) 與 JavaScript 和其他函式庫進行通訊。雖然 Elm 尚未達到版本 1,但它正被用於複雜和大型的應用程序,使其成為複雜的應用程式的可行的解決方案。

Elm 最具吸引力的功能之一是初學者友善的編譯器,不是產生難以閱讀的訊息,而是產生程式碼,可以幫助你修復你的程式碼。如果你在學習該語言,編譯器本身就可以大有助益。

module Main exposing (..)

import Html exposing (..)


-- MAIN


main : Program Never Model Msg
main =
    Html.program
        { init = init
        , update = update
        , view = view
        , subscriptions = subscriptions
        }



-- INIT


type alias Model = String


init : ( Model, Cmd Msg )
init = ( "Hello World!", Cmd.none )


-- UPDATE


type Msg
    = DoNothing


update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
    case msg of
        DoNothing ->
            ( model, Cmd.none )


-- VIEW


view : Model -> Html Msg
view model =
    p [] [text model]


-- SUBSCRIPTIONS


subscriptions : Model -> Sub Msg
subscriptions model =
    Sub.none

 

開始使用 Elm

PureScript

PureScript 是由 Phil Freeman 所建立的純函數式強型別的程式語言。它旨在為可用的 JavaScript 庫提供強大的兼容性,在精神上類似於 Haskell,但保持 JavaScript 的核心。

PureScript 的一个强项是它的极简主义。它不包括在其他语言中被认为是必需的功能的任何库。例如,不是编译器本身包含生成器和 promises,而是你可以使用特定的库来完成任务。你可以为所需功能选择想要的实现,这样可以在使用 PureScript 时实现高效和个性化的体验,同时保持生成的代码尽可能小。

其编译器的另一个显著特征就是能够在保持与 JavaScript 的兼容性的同时, 用库和工具生成整洁和可读的代码。

像其他语言一样,PureScript 有自己的构建工具叫做 Pulp,可以与 Gulp 进行比较, 但是用于以这种语言编写的项目。

关于类型系统,与 Elm不同,即另一种 ML 式的语言,PureScript 支持高级类型的功能,如取自 Haskell 的 higher-kinded types(高级类类型) 以及 type classes(类型类), 从而允许创建复杂的抽象。

module Main where

import Prelude
import Data.Foldable (fold)
import TryPureScript

main =
    render $ fold
      [ h1 (text "Try PureScript!")
      , p (text "Try out the examples below, or create your own!")
      , h2 (text "Examples")
      , list (map fromExample examples)
      ]
  where
    fromExample { title, gist } =
      link ("?gist=" <> gist) (text title)

    examples =
      [ { title: "Algebraic Data Types"
        , gist: "37c3c97f47a43f20c548"
        }
      , { title: "Loops"
        , gist: "cfdabdcd085d4ac3dc46"
        }
      , { title: "Operators"
        , gist: "3044550f29a7c5d3d0d0"
        }
      ]

 

开始使用 PureScript

CoffeeScript

CoffeeScript 是一种语言,旨在公开 JavaScript 的良好部分,同时提供更整洁的语法并保留语义。虽然该语言的流行度近年来一直在减弱,但它正在改变方向,现在正在获得一个新的主要版本,为 ES2015+ 的功能提供支持。

你用 CoffeeScript 编写的代码被直接翻译为可读的 JavaScript 代码,并保持与现有库的兼容性。从版本 2 开始,编译器将产生与最新版本的 ECMAScript 兼容的代码。例如,每次你使用一个类,你就获得一个 JavaScript 类。另外,如果你使用 React,也有好消息: JSX 与 CoffeeScript 兼容。

以上内容介绍了10个有趣的语言,这些语言都可以转换成JavaScript代码在浏览器中执行,也可以在Node.js这样的平台上执行。希望能帮助到大家。

相关推荐:

如何用php传递数组给js脚本

JavaScript实现浏览器用户代理检测脚本的方法详解

JavaScript中关于表单脚本的实用技巧

以上是10 個 有趣的 JavaScript 的腳本語言的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn