YOS G-specの適当なブログ
ゲームやネットが大好きな人のブログ。毎日更新を目指してました。
2016年10月31日 (月) 22:03 | 編集
【JS Array Loop】
【VB Array Loop】
【VB ArrayList Loop】
【VB List Loop】
【VB Hashtable Loop】
【VB Dictionary Loop】

…配列とかコレクションの中身を列挙する方法とかそもそもの定義方法の確認。

【SleepSortMin.js】
【SleepSortMin.vb】

…数字のみの比較を行うように最小限の構成にしてみた。
 VBの方はThread.SleepをTask.Derayに置き換えたり、ContinueWith置いてみたり小細工色々。
 でも、Task.Derayに変えたら精度が落ちた気がするからどうなんだろうか。
2016年10月27日 (木) 22:53 | 編集
実行リンク
Promiseはチェーンしたら再帰以外のループ無理じゃない?って思って色々試していたらできた。
挙動はなんとなく再帰っぽい気もするけど、ちゃんとfor文使っているし良しとしよう。
本当はAsync/Await使っちゃえば一番楽なんだけど、それはまだ全然実装進んでなくて生のJavaScriptでは難しい話。
以下ソース

//Promiseでfor文を回すテスト
(function(){
//適当なPromiseを返す関数
const slout=(name,wait)=>new Promise(
resolve=>setTimeout(()=>{
console.log(name+":"+wait);
resolve(name);
},wait)
);

//初めのPromise
new Promise(resolve=>setTimeout(()=>{console.log("Start!");resolve(">");},1000))
.then(value0=>{
//チェーンするための空Promise(引数入り)を用意
var Pfor=Promise.resolve(value);

for(let i=0;i<=40;i+=2){
//forで回転させてthenチェーンをひたすら繋げる
Pfor=Pfor.then(value=>{
return slout(value+"|",i*10); //returnは忘れずに
});
}
//完成したPromiseを返す
return Pfor;
})
//おしまい!
.then(value=>console.log("Next"));
})();

実行結果:
Start!
>|:0
>||:20
>|||:40
>||||:60
>|||||:80
>||||||:100
>|||||||:120
>||||||||:140
>|||||||||:160
>||||||||||:180
>|||||||||||:200
>||||||||||||:220
>|||||||||||||:240
>||||||||||||||:260
>|||||||||||||||:280
>||||||||||||||||:300
>|||||||||||||||||:320
>||||||||||||||||||:340
>|||||||||||||||||||:360
>||||||||||||||||||||:380
>|||||||||||||||||||||:400
Next
2016年10月27日 (木) 02:17 | 編集
最近JavaScriptのPromiseでどのように非同期やるかを勉強していたけど、
.NETのTaskもそれにかなり仕組みが似ていることを知った。
そして、それぞれに実装されているAsync/Await(JavaScriptはES.nextで予定)もそれぞれの非同期オブジェクトであるPromiseやTaskを包むというあたり使い方が似ている。

今回はそれらの比較のために、同じ動作をするようなプログラムを
JavaScript(TypeScript)、C#、VB.netの3言語と
Promise/Task版、Async/Await版の2種ずつ、
計6種作成した。
内容としては非同期でSleep待ち合わせをさせるプログラムとなる。

# Promise/Taskのみ #
【JS Promise】
【C# Task】
【VB Task】

# Async/Await #
【TS Promise Async/Await】【TS to JS】
【C# Task Async/Await】
【VB Task Async/Await】

以下、追記より。
≫追記を読む...
2016年10月25日 (火) 01:00 | 編集
面白いアルゴリズムを見つけた。
最近、非同期について勉強していたし、単純なアルゴリズムだから試しに実装してみた。

SleepSort(仮)

数字は大丈夫だと思うけど、アルファベットのソートはおかしくなるかも。
文字コード読んで足してるだけだからね。
確認は全然してないし、色々と保障はしない。
2016年10月22日 (土) 16:56 | 編集
TypeScriptでasync/awaitを使うテスト。
Promiseだけでもthenとreturn代わりのresolve関数だけで繋げるのを確認したけど、
チェーンしなきゃいけないからループもできないしでまだ足りない。
ES6ではまだ無いけど、C#/VBにあるasync/awaitで必要なPromiseだけ用意しておけばあとは殆ど同期関数と同じ書き方ができたので最強すぎた。
便利だからJavaScriptにも早く来てほしい。

(async function (): void{
//PromiseにsetTimeoutとrl.questionを閉じ込める
const sleep = (wait: number) => new Promise(resolve => setTimeout(resolve, wait));
const rl = require("readline").createInterface(process.stdin, process.stdout);
const readline = (str: string) => new Promise(resolve => rl.question(str, (input:string)=>resolve(input)));

/* スリープループ */
for(let i: number = 0; i <= 10; i++) {
await sleep(1000);
console.log(i);
}

/* 待ち合わせ処理 */
const WaitA = new Promise(resolve => setTimeout(() => { console.log("WaitA is 1500"); resolve() }, 1500));
const WaitB = new Promise(resolve => setTimeout(() => { console.log("WaitB is 1000"); resolve() }, 1000));
const WaitC = new Promise(resolve => setTimeout(() => { console.log("WaitC is 2000"); resolve() }, 2000));

await Promise.all([WaitA, WaitB, WaitC]);

/* 標準入力ループ */
for(let i: number = 0; i <= 10; i++) {
let str: string = await readline("Input" + i + ":\> ");
console.log("Echo" + i + ":> " + str);
}
console.log("Done!");
await readline("");
process.exit();
})();

ちなみにVBだと殆ど同様に動く処理がawait無しで書ける。
Imports System.Console
Imports System.Threading.Thread

Module Module1

Sub Main()
Dim readlineQ As Func(Of String, String) = Function(str)
Write(str) : Return ReadLine() : End Function
For i As Long = 0 To 10
Sleep(1000)
WriteLine(i)
Next

Dim WaitA As Task = Task.Run(Sub()
Sleep(1500) : WriteLine("WaitA is 1500") : End Sub)
Dim WaitB As Task = Task.Run(Sub()
Sleep(1000) : WriteLine("WaitB is 1000") : End Sub)
Dim WaitC As Task = Task.Run(Sub()
Sleep(2000) : WriteLine("WaitC is 2000") : End Sub)
Task.WaitAll(WaitA, WaitB, WaitC)

For i As Long = 0 To 10
Dim str As String = readlineQ("Input" & i & ":> ")
WriteLine("Echo" & i & ":> " & str)
Next
WriteLine("Done!")
readlineQ("")
End Sub
End Module
Template by 【投資信託のことなら】投信Web /

Powered by .