はじめに
これは、Visual Basic Advent Calendar 2016 の24日目の記事となります。
メリークリスマス!。今年は映画の「君の名は。」が大ヒットしましたね。
勤めている会社の近くに映画館があるので、サービスデイを選んで映画をよく観に行きます。
「君の名は。」ですがアニメという前提知識だけで監督やプロデューサーが誰とか知らないでスポーツジムで疲れた後に観ました。つまらないと寝てしまうかもと思って見始めたのですがそんなことは全く無く、むしろ観終わった後にこんな脚本を自分でも書いてみたいと思った程です。
さて、「君の名は。」の2大要素といえば、入れ替わりとタイムリープですよね。
これをモチーフにして.NETの2大言語であるVisual BasicとC#で何かしらやってみようという試みです。
入れ替わり
映画『君の名は。』で有名なワンシーン
「これってもしかして、俺たち・私たち、入れ替わってるー!?」
体はVisual Basicなのに、心はC#
Imports System
Imports Microsoft.CodeAnalysis.CSharp.Scripting
Module ModuleApp
Sub Main()
Dim script As String = <query><![CDATA[
for (int i = 1; i <= 100; i++)
{
if (i % 15 == 0) System.Console.Write("私俺 ");
else if (i % 5 == 0) System.Console.Write("俺 ");
else if (i % 3 == 0) System.Console.Write("私 ");
else System.Console.Write("{0} ", i);
}
System.Console.ReadLine();
]]></query>.Value
CSharpScript.RunAsync(script).Wait()
End Sub
End Module
1 2 私 4 俺 私 7 8 私 俺 11 私 13 14 私俺 16 17 私 19 俺 私 22 23 私 俺 26 私 28
29 私俺 31 32 私 34 俺 私 37 38 私 俺 41 私 43 44 私俺 46 47 私 49 俺 私 52 53
私 俺 56 私 58 59 私俺 61 62 私 64 俺 私 67 68 私 俺 71 私 73 74 私俺 76 77 私
79 俺 私 82 83 私 俺 86 私 88 89 私俺 91 92 私 94 俺 私 97 98 私 俺
体はC#なのに、心はVisual Basic
using System;
using Microsoft.CodeAnalysis.VisualBasic.Scripting;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
string script = @"
For i As integer = 1 To 100
If i Mod 15 = 0 Then
System.Console.Write(""俺私 "")
ElseIf i Mod 5 = 0 Then
System.Console.Write(""私 "")
ElseIf i Mod 3 = 0 Then
System.Console.Write(""俺 "")
Else
System.Console.Write(i & "" "")
End If
Next
System.Console.ReadLine()
";
VisualBasicScript.RunAsync(script).Wait();
}
}
}
1 2 俺 4 私 俺 7 8 俺 私 11 俺 13 14 俺私 16 17 俺 19 私 俺 22 23 俺 私 26 俺 28
29 俺私 31 32 俺 34 私 俺 37 38 俺 私 41 俺 43 44 俺私 46 47 俺 49 私 俺 52 53
俺 私 56 俺 58 59 俺私 61 62 俺 64 私 俺 67 68 俺 私 71 俺 73 74 俺私 76 77 俺
79 私 俺 82 83 俺 私 86 俺 88 89 俺私 91 92 俺 94 私 俺 97 98 俺 私
※Microsoft.CodeAnalysis.VisualBasic.Scriptingについては、NuGetパッケージの管理の検索では見つからず、パッケージマネージャーコンソールからインストールしました。
PM>Install-Package Microsoft.CodeAnalysis.Scripting.Common -Version 1.2.0
PM>Install-Package Microsoft.CodeAnalysis.VisualBasic.Scripting -Version 1.2.0
タイムリープ
2011年に隕石("Roslyn"(ロズリン))が落下してきました。1
それから4年後のVisual Studio 2015に次世代コンパイラRoslyn改め.NETコンパイラープラットフォームとして搭載されました。
これにより前述の入れ替わり(.NET4.6以降)が出来るようになり、C#に置いていかれていた印象2があったVisual Basicも機能的にはほぼ追いつきました。3
Visual StudioのIDEにおいては、リファクタリング機能やインポートの整理と並び替えがC#同様に出来るようになりました。
やっと、C#に「君の名は」と尋ねることが出来るのです・・・
最後に
かなりかなり強引ではありますが、「君の名は。」を実現してみ・ま・し・た・・・。あーものを投げないで・・・!!
「君の名は。」については下記のネタでも使いました、良かったらご覧ください。
TensorFlowコトハジメ Word2Vecで「君の名は。」と戯れてみた
参照
- Visual Studio 2015の新機能“Roslyn”とは
- Visual Basic 2010の新機能
- Visual Basic Advent Calendar 2015
- .NETコンパイラープラットフォームRoslynを使ってExcelをC#で操作できるように拡張する
- システムアート研究所:NET Framework VB vs C#