忍者ブログ

RPG製作ソフト「Role Paint」を作っていくぜ!ツクールのようなRPG製作ソフト「Role Paint」を作っていくブログ。 相互リンク募集中

ビジュアルプログラミングで問題発生。プログラミング初心者にオブジェクト指向は使いこなせるか?

ビジュアルプログラミングを採用すると言いながら、かなり前に進んでいない。

前の記事にも書いたようにビジュアルプログラミング言語の仕組みを

・CやC++のような非スクリプト言語

・Luaのようなスクリプト言語

ツクールのイベントコマンド(ビジュアルプログラミング)

という形にしようとした。これを

・CやC++のような非スクリプト言語

ビジュアルプログラミングとスクリプト言語を相互に変換可能

という形にしようとしたが、これがまるで上手く行かないのである。

理由は二つ。一つは技術的問題。スクリプト言語にすると決めたRuby(mruby)だが、言語仕様が非常に複雑でビジュアルプログラミングに変換しようとすると、かなり技術的に手間がかかる。
Rubyが分かりやすく、書きやすい理由はこの複雑さがもたらす直感性にある。だが、これがビジュアルプログラミングの変換への壁になっているのだ。
(なら、Luaなら良いのかというと、そうはならない事は前の記事に書いた。おそらくもっと碌でもない結果になる。)

また、情けない話だがmrubyがどうやってRubyのソースコードを変換してコンピュータ上で動作しているのか、調べても中々分からない。ASTやyacc、lint等単語は出てくるのだが、これらをどう使いこなしてビジュアルプログラミングに繋げるのか、よく掴めない。なんて情けない・・・。

もう一つの理由はもっと深刻な物になる。もしRubyをそのままビジュアルプログラミング言語に変換できるようにしたとしても、初心者は使いこなせるのか?

Rubyはあくまでそれなりに書けるプログラマがプログラムを簡単に書くために作られた物だ。初心者が書くために作られた言語ではない。そのため、オブジェクト指向やメタプログラミングなど初心者にはよく分からない概念が大量に出てくる。この壁はおそらくビジュアルプログラミング言語に変換しただけではどうにもならない。

もし、Rubyのソースをビジュアルプログラミングに変換するとこうなるだろう、

まず、Rubyのサンプルソースを書く。

class Sample < Base

  attr_accessor : foo              

  def initialize
    @foo = 10
  end

  def output
     if foo.is_a?(Integer) != false
        print "fooの値は異常です"
     elsif @foo <= -1
        print "fooの値は出力できる範囲以下です"
     elsif foo >= 1000
   print "fooの値は出力できる範囲以上です"
     elsif foo== nil
        print "fooの値は設定されていません"
     else
        print foo.to_s+"です"
     end
  end
end

これを今考えているビジュアルプログラミングに変換するとこうなる。

クラス Sample  継承 Base

  読み書きできる: foo              

  関数 初期化
    インスタンス変数 foo ← 10
  関数の終わり

  関数 output
     条件分岐 インスタンス変数 foo.型は同じか(整数)  ≠ false
        出力 "fooの値は異常です"
     別の条件分岐 インスタンス変数 foo ≦ -1
         出力 "fooの値は出力できる範囲以下です"
     別の条件分岐 インスタンス変数 ≧ 1000
    出力 "fooの値は出力できる範囲以上です"
     別の条件分岐 インスタンス変数 = 空
        print "fooの値は設定されていません"
     どの条件にも合わない時
        print foo.文章に変換+"です"
     条件分岐の終わり
  関数の終わり
クラスの終わり

(数字の部分はスピンボタン、関数の名前やクラスの名前ははテキストボックスで、等号記号や演算子はドロップリストで変更可能)

・・・はっきり言って、ソースコードの一部分を日本語にし、代入を示す=を←、条件が偽で有る事を示す!=を≠等、プログラマーしか知らない記号を誰もが知っている記号に変換しただけである。おそらく「クラス」「関数」という単語を見ただけで、「これは何だ?」と初心者はなるだろう。結局、Rubyをビジュアルプログラミングに変換したところで、思っている以上に初心者にとって分かりやすくならないのである。

こうなると初心者にクラスや継承などといったオブジェクト指向を勉強してもらう事になるが、これが初心者と中級者の一番の壁となる。オブジェクト指向は難しく、おそらくこれを理解出来るか否かがCのポインタと並んでプログラマになれるかなれないかを生む壁である。ポインタはCとC++でしか殆ど使わない事を考えるとポインタとは比べ物にならない程の壁とも言える。

おそらく、対策方法はRubyのクラス等の根本的機能を削る事になるが、こうなると相互変換は不可能となる。

結局、ツクールのイベントコマンドのように

・CやC++のような非スクリプト言語

・Luaのようなスクリプト言語

ツクールのイベントコマンド(ビジュアルプログラミング)

のような形のほうが自然に収まるのだろう。ただ、そうなると

>ユーザーがスクラッチを使って組むのはいい方向だとして、そのスクラッチで、
>kureteさん自身がバトルやメニュー、乗り物の乗降などを作って、
>それを標準装備していることの方が大事です。
>初心者を脱した人が標準に設定されているスクラッチを改造することで、
>拡張できるという利点に結び付きます。
>ユーザーはスクラッチだけど、メニューなどはLuaですという場合には、
>MVと何も変わりません。


セブン 2017/04/13(Thu)22:30:26


という意見の実現が難しくなる。一部の部分はどう足掻いてもスクリプト言語を使いこなせないと作れない事になる。この辺の線引をどうするべきだろうか?

とにかく、この事が原因で一ヶ月近く、開発が碌に進んでいない。どうした物か。

拍手[0回]

PR
Comment
name
title
color
mail
URL
comment
pass   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
コメントの修正にはpasswordが必要です。任意の英数字を入力して下さい。