RubyやPhythonのように軽量のCoffeeScriptですが、コード量を減らすなどメリットがあります。
CoffeeScriptからJavaScriptの変換はCoffeeScriptのTry Scriptで確認できます。
coffee scriptのヒアドキュメント
html = """ <div id="main"> hello </div> """
随机应变 ABCD: Always Be Coding and … : хороший
RubyやPhythonのように軽量のCoffeeScriptですが、コード量を減らすなどメリットがあります。
CoffeeScriptからJavaScriptの変換はCoffeeScriptのTry Scriptで確認できます。
coffee scriptのヒアドキュメント
html = """ <div id="main"> hello </div> """
with Ada.Text_IO; use Ada.Text_IO; with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; procedure MyApp is generic type element is private; procedure Swap(a, b: in out element); procedure Swap(a, b: in out element) is tmp: element; begin tmp := a; a := b; b := tmp; end Swap; procedure SwapInt is new Swap(Integer); procedure SwapChar is new Swap(Character); i1: Integer := 3; i2: Integer := 5; c1: Character := 'a'; c2: Character := 'd'; begin put(i1); new_line; put(i2); new_line; put(c1); new_line; put(c2); new_line; SwapInt(i1, i2); SwapChar(c1, c2); put(i1); new_line; put(i2); new_line; put(c1); new_line; put(c2); new_line; end MyApp;
[vagrant@localhost ada_lessons]$ gnatmake myapp.adb gcc -c myapp.adb gnatbind -x myapp.ali gnatlink myapp.ali [vagrant@localhost ada_lessons]$ ./myapp 3 5 a d 5 3 d a
with Ada.Text_IO; use Ada.Text_IO; with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; procedure MyApp is procedure SayHi(name: in String) is begin put_line("hi!" & name); end SayHi; begin SayHi("tom"); SayHi("bob"); end MyApp;
[vagrant@localhost ada_lessons]$ gnatmake myapp.adb gcc -c myapp.adb gnatbind -x myapp.ali gnatlink myapp.ali [vagrant@localhost ada_lessons]$ ./myapp hi!tom hi!bob
Adaのloopは永久ループなので、exitで処理を抜けます。
-- Float --変数 with Ada.Text_IO; use Ada.Text_IO; with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; procedure MyApp is count: integer; i: integer := 1; begin get(count); loop put(i); new_line; i := i + 1; exit when i > count; end loop; end MyApp;
[vagrant@localhost ada_lessons]$ gnatmake myapp.adb gcc -c myapp.adb gnatbind -x myapp.ali gnatlink myapp.ali [vagrant@localhost ada_lessons]$ ./myapp 4 1 2 3 4
-- Float --変数 with Ada.Text_IO; use Ada.Text_IO; with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; procedure MyApp is score: integer; begin get(score); if score > 80 then put_line("great!"); elsif score > 60 then put_line("good!"); else put_line("..."); end if; end MyApp;
[vagrant@localhost ada_lessons]$ gnatmake myapp.adb gcc -c myapp.adb gnatbind -x myapp.ali gnatlink myapp.ali [vagrant@localhost ada_lessons]$ ./myapp 25 ...
--定数 --変数 with Ada.Text_IO; use Ada.Text_IO; with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; procedure MyApp is x: Integer; y: constant Integer := 3; begin x := 5; put(x); new_line; x := 10; put(x, 5); new_line; put(y); new_line; end MyApp;
四則演算
--定数 --変数 with Ada.Text_IO; use Ada.Text_IO; with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; procedure MyApp is x: Integer; begin put("your number? "); get(x); put(x + 3); new_line; put(x - 3); new_line; put(x / 3); new_line; put(x rem 3); new_line; put(x * 3); new_line; put(x ** 3); new_line; end MyApp;
25を入力してみます。
[vagrant@localhost ada_lessons]$ gnatmake myapp.adb gcc -c myapp.adb gnatbind -x myapp.ali gnatlink myapp.ali [vagrant@localhost ada_lessons]$ ./myapp your number? 25 28 22 8 1 75 15625
Adaの拡張子は、adbです。myapp.adbファイルをつくり、早速コードを書いてみましょう。
with Ada.Text_IO; use Ada.Text_IO; procedure MyApp is begin put_line("hello world!"); end MyApp;
[vagrant@localhost ada_lessons]$ gnatmake myapp.adb gcc -c myapp.adb gnatbind -x myapp.ali gnatlink myapp.ali [vagrant@localhost ada_lessons]$ ls myapp myapp.adb myapp.ali myapp.o [vagrant@localhost ada_lessons]$ ./myapp hello world!
Adaとは米国防総省が中心となって開発されているプログラミング言語です。戦闘機の制御などに使われています。
Adaはコンパイルしなければなりませんので、開発環境にGNATをインストールしましょう。コマンドは以下の通りです。GNATはGCCに含まれるAdaのコンパイラです。
[vagrant@localhost ada_lessons]$ sudo yum install -y fedora-gnat-project-common
実際にコンパイルする際には gnat makeとしますが、インストールが終わったら、バージョンを確認してみましょう。
[vagrant@localhost ada_lessons]$ gnat make --version GNATMAKE 4.4.7 20120313 (Red Hat 4.4.7-17) Copyright (C) 1995-2008, Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
さあ、ミサイル開発のスタートです。
var mainCtr = function($scope, $http){ $scope.doSearch = function(){ var uri = "http://search.twitter.com/search.json?q=" + $scope.query + '&callback=JSON_CALLBACK'; $http.jsonp(uri).success(function(data){ console.dir(data.results); $scope.results = data.results; }); } }
<!DOCTYPE html> <html lang="ja" ng-app> <head> <meta charset="UTF-8"> <title>Angularの練習</title> <script src="http://code.angularjs.org/angular-1.0.1.min.js"></script> <script src="myscript.js"></script> </head> <body> <h1>Twitter Search</h1> <div ng-controller="mainCtrl"> <form ng-submit="doSearch()" name="myForm"> <input type="text" ng-model="query" required> <input type="submit" value="search" ng-disabled="myForm.$invalid"> </form> <h2>Result</h2> <ul> <ul ng-show="results.length"> <li ng-repeat="result in results"> <img ng-src="{{result.profile_image_url}}"> <a ng-href="http://twitter.com/{{result.from_user}}/status">{{result.text}}</a> ({{result.from_user}}) </li> </ul> <p ng-hide="results.length">↑から検索してください</p> </div> </body> </html>
Angular.jsによるToDoListをつくります。挙動はブラウザで確認ください。
var mainCtrl = function($scope, $http){ $scope.tasks = [ {"body":"do this 1", "done":false}, {"body":"do this 2", "done":false}, {"body":"do this 3", "done":true}, {"body":"do this 4", "done":false}, ]; $scope.addNew = function(){ $scope.tasks.push({"body":$scope.newTaskBody,"done":false}); $scope.newTaskBody = ''; } $scope.getDoneCount = function(){ var count = 0; angular.forEach($scope.tasks, function(task){ count += task.done ? 1 : 0; }); return count; } $scope.deleteDone = function(){ var oldTasks = $scope.tasks; $scope.tasks = []; angular.forEach(oldTasks, function(task){ if (!task.done) $scope.tasks.push(task); }) } }
index.html
<!DOCTYPE html> <html lang="ja" ng-app> <head> <meta charset="UTF-8"> <title>Angularの練習</title> <script src="http://code.angularjs.org/angular-1.0.1.min.js"></script> <script src="myscript.js"></script> <style> .done-true{ color:gray; text-decoration:line-through; } </style> </head> <body> <h1>Todo list</h1> <div ng-controller="mainCtrl"> <p>Finished Task: {{getDoneCount()}} / {{tasks.length}} <button ng-click="deleteDone()">Delete finished</button> </p> <ul> <li ng-repeat="task in tasks"> <input type="checkbox" ng-model="task.done"> <span class="done-{{task.done}}">{{task.body}}<span> <a href ng-click="tasks.splice($index,1)">[x]</a> </li> </ul> <form ng-submit="addNew()"> <input type="text" ng-model="newTaskBody"> <input type="submit" value="add"> </form> </div> </body> </html>