JavaScript がすべてのタスクに最適な言語ではないことは誰もが知っています。また、複雑なアプリケーションに関しては、JavaScript が適していない可能性があります。この問題を回避するために、いくつかの新しい言語と既存の言語のバリエーションが作成されており、それらはすべて、JavaScript コードを記述したり、言語の制限を考慮したりすることなく、ブラウザーで実行できるコードを生成します。
Dart は古典的なオブジェクト指向言語であり、すべてがオブジェクトであり、あらゆるオブジェクトがクラスのインスタンスです (オブジェクトは関数としても機能します)。これは、ブラウザ、サーバー、モバイル デバイス用のアプリケーションを構築するために特別に設計されています。これは Google によって管理されており、Google の収益を生み出す最も重要な製品である AdWords の次世代ユーザー インターフェースを推進する言語であり、それ自体が AdWords が大規模に威力を発揮する証拠です。
この言語は、ブラウザーで使用するために JavaScript に変換することも、Dart VM によって直接解釈して実行することもでき、サーバー アプリケーションを構築することもできます。モバイル アプリは Flutter SDK を使用して作成できます。
複雑なアプリケーションには、タスク用に特別に設計された成熟したライブラリと言語機能のセットも必要であり、Dart にはそれらがすべて含まれています。人気のあるライブラリの例としては、Angular の Dart バージョンである AngularDart があります。
これにより、型をあまり押し付けがましくせずに型安全なコードを書くことができますが、型は推論できるため、その必要はありません。これにより、詳細を深く考えずに迅速なプロトタイプを作成できますが、プロトタイプが機能したら、型を追加してより堅牢にすることができます。
仮想マシンでの同時プログラミングに関して、Dart は共有メモリ スレッド (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 は JavaScript のスーパーセットです。有効な JavaScript プログラムは有効な TypeScript プログラムでもありますが、後者は静的型付けを追加します。そのコンパイラーは、ES2015 以降から現在の実装へのトランスレーターとしても機能するため、常に最新の機能を利用できます。
他の多くの言語とは異なり、TypeScript は JavaScript の精神をそのまま維持し、コードの信頼性を向上させる機能のみを追加します。これらは、リファクタリング プロセスを支援する静的アナライザーなどの特殊なツールを有効にすることで、JavaScript の作成をより楽しくする型アノテーションと他の型関連機能です。さらに、タイプを追加すると、アプリケーションのさまざまなコンポーネント間のインターフェイスが改善されます。
型推論がサポートされているため、最初からすべての型を記述する必要はありません。簡単なソリューションを作成し、すべてのタイプを追加してコードに自信を得ることができます。
TypeScript は、交差型、共用体型、型エイリアス、判別共用体、型ガードなどの高度な型もサポートしています。これらの型はすべて、TypeScript ドキュメント サイトの「Advanced Types」ページで確認できます。
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、HTML、CSS にコンパイルできる純粋な関数型プログラミング言語です。 Elm だけを使用してサイト全体を構築できます。これにより、React のような JavaScript フレームワークの優れた代替品となります。これを使用して構築されたアプリケーションは、仮想 DOM ライブラリを自動的に使用するため、非常に高速になります。その大きな利点の 1 つは、データ フローを忘れてデータ宣言とロジックに集中できる組み込みアーキテクチャです。
Elm では、すべての関数は純粋です。つまり、指定された入力に対して常に同じ出力を返します。あなたが指定しない限り、他のことはできません。たとえば、リモート API にアクセスするには、外部と通信するための command (コマンド) 関数と、応答をリッスンするための subscription (サブスクリプション) を作成します。純粋さのもう 1 つのポイントは、値が不変であることです。何かが必要な場合、古い値を変更するのではなく、新しい値を作成します。
Elm の導入は段階的に行うことができ、ports を使用して JavaScript や他のライブラリと通信することができます。 Elm はまだバージョン 1 に達していませんが、複雑で大規模なアプリケーションで使用されており、複雑なアプリケーションにとって実行可能なソリューションとなっています。
Elm の最も魅力的な機能の 1 つは、初心者に優しいコンパイラーであり、読みにくいメッセージを生成する代わりに、コードの修正に役立つコードを生成します。言語を学習している場合は、コンパイラー自体が非常に役立ちます。
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 は、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 是一种语言,旨在公开 JavaScript 的良好部分,同时提供更整洁的语法并保留语义。虽然该语言的流行度近年来一直在减弱,但它正在改变方向,现在正在获得一个新的主要版本,为 ES2015+ 的功能提供支持。
你用 CoffeeScript 编写的代码被直接翻译为可读的 JavaScript 代码,并保持与现有库的兼容性。从版本 2 开始,编译器将产生与最新版本的 ECMAScript 兼容的代码。例如,每次你使用一个类,你就获得一个 JavaScript 类。另外,如果你使用 React,也有好消息: JSX 与 CoffeeScript 兼容。
以上内容介绍了10个有趣的语言,这些语言都可以转换成JavaScript代码在浏览器中执行,也可以在Node.js这样的平台上执行。希望能帮助到大家。
相关推荐:
以上が10 の興味深い JavaScript スクリプト言語の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。