共通テスト手順記述標準言語(DNCL)ってなに?

DNCLの説明ドキュメント

もう何年も前から小学校や中学校でも「情報」という時間があるとか「プログラミング」があるのだとかいう話しを耳にすることが増え、なんとなく漠然としててどんなことをしているのか雲をつかむような印象を持っているわけなのですが。

入門用の学習教材などをながめていると現物のブロックを並べ替えながら流れを作っていくようなものだと未就学児用として準備されていたり、小学生では画面上でスクラッチを並べてプログラムを組んでいたり、中学生になるともうコーディングをしていたりと、思ったよりもちゃんと組ませているじゃないかとヘンに感心してしまうわけです。

■大学入試にも関わってくるとは!

いまや高校生でも当たり前のように「情報」の時間があってプログラミングを学ぶようで、大学入試にもプログラミングの知識が問われるようになってくるのですね。

「プログラミングの知識」とか「ロジカル思考」とか表現していますけれど、結局のところプログラミングそのものの知識を問う問題になってくるようで、そうなると数あまたあるプログラミング言語のどれを標準知識として定義できるのか?という壁が当然ながら出てきます。

なので、いっそのこと世の中に無い 試験のためだけに特化したプログラミング言語(DNCL)で出題してしまおう、というのが大学入試センターのたどり着いた答えのようです。

■私は大昔にCASLを選択しましたが

試験用に特化した言語という共通点だけで思い浮かべてみるとCASLなんてのがあったなあと懐かしく思ってしまう世代なのですが。

あ、個人的に情報処理試験(1種とか2種とか特種とかシステム監査とか呼んでいた頃なのでかなり大昔です)を受けるときにプログラム言語を選択できたのですが、たしか選択肢がFORTRAN,COBOL,CASLあたりの世代で、その当時は「仕様をあらかじめ覚えなくても問題用紙に言語仕様が掲載されるから」という理由だけで仮想の機械語CASLで受けた覚えがあります。

今に比べればとても広く浅く知識を問われる試験だったのでその程度の気持ちで充分だったわけですが、いまや一言で情報処理と言っても領域が細分化されて問われる知識も深くなっていますからなかなか難しいのかもしれません。

■DNCLって何の略?

一説には「Daigaku Nyushi Center Language(大学入試センター言語)」の略称ではないかとの事ですが公表はされていないようですね。DNCL自体は20年ほど前に作られており工業系の生徒を対象とした試験で使われていたようです。

そのDNCLの仕様説明はココで配布されています。(その後より一般的なプログラム言語に近づけるような形で修正が入っているようなのですが、DNCL2で探してもなかなか見つからず今後の出題例の記述とは相入れない記述方法の部分がけっこうありますね)

試験では令和7年度から出題されることとなるようです。ざっくりとした印象ではIPAのITパスポート試験か基本情報処理試験かな?というような広範囲の基礎的な知識を問われるような問題文が例示されていました。

そのなかで、実際に問題文に即した動作ができるようにDNCLで作成されたプログラムコードを見て穴埋めをする、という形で出題されるような問題の作りになっていました。

さて、DNCLの仕様説明をパラパラとめくっているとなにやらなじみのない記述があるなあと思ったわけなのですが(私が不勉強なだけかもしれませんが)命令文が日本語なのはさておき、たとえば以下のような点は押さえておいたほうが良いかもしれません。

共通テスト用の例題
  • 小文字で始まるものは「変数」、大文字で始まるものは「配列」

tensu や goukei みたいに書けば変数とみなされるのはプログラミングではだいたいの言語でお馴染みですが、Tensu や Goukei みたいに先頭を大文字で書くと配列とみなされるというのはなかなか見ない体系かと思います。
配列なのでTensu[0] や Goukei[1,2 ]などのような表現になります。プログラム慣れした方だとうっかり小文字で配列を書いてしまいそうなので注意が必要ですね。

  • すべて大文字の変数は「実行中に変化しない値を保持する」

変化しない値と言えば javaの final だったり swiftの let だったりといった印象でしょうか。「すべて大文字」の「変数」ということなのでなんとなく配列の定義と被っているのが気持ち悪い印象ですが、なかなか普段のプログラミングでも全て大文字というのは通常は使いたくないもの(シフトキーを押しながら入力するのはめんどくさいという理由)なので間違えることはないかと。

  • 文字列はダブルクォーテーション(”)かカッコ(「」)で囲む:修正あり

一般的にシングルクォーテーション(’)かダブルクォーテーション(”)で文字列を囲むものと刷り込まれていますが、カッコ(「」)を使うというのは経験がないですね。ちょっと問題文を読むのに誤解してしまいそうで心が落ち着かない仕様です。

ただしカッコ(「」)で囲む側については今後の例題では使用されていないので廃止された仕様かもしれません。

  • 代入分は左矢印(←)を使う:修正あり

うっかりイコール(=)で代入したくなるのが一般的なプログラミング言語に慣れた方だとおもいますが、DNCLでは左矢印(←)で表現するようです。=で書くよりも直感的な表現ですし動作も見た目通りですね。でもうっかり=と書いてしまいそうですが。

すると右矢印(→)は代入文にはならないのだろうかとふと意地悪心が湧きましたが、残念ながら仕様説明には右矢印は含まれていませんでした。(もし含まれていたらややこしいことこの上ない仕様になりましたね)

ここの部分もすでに今後の例題には矢印(←)の記述がなく、一般的なプログラミング言語で用いられるイコール(=)がさらっと記載されているので仕様変更があったのでしょう。

ちなみに x += 1、とか x++ という感じでよく表現されるようなインクリメント(およびデクリメント)については 『x を増やす(xを減らす)』と言う書き方と記載されていますが、この部分についても廃止になったのかもしれませんし積極的に使う理由がないですね。

  • 比較演算子に「≠」がある:修正あり

not equalについてはよく x != 0 とか x <> 0 (たまに x -ne 0 など)といった具合に記述しますが、DNCLだとそのまんまノットイコール記号(≠)を使うことになります、すげえ。

キーボードで入力することを考えたら『≠』って打ちにくいと思うのだけれどな、手書きだったらむしろ良いという判断なのか。

こちらもさすがに入力のしにくさという問題があったのか、今後の例題ではごくごく一般的な(!=)に差し代わっているようです。

  • 論理演算子は日本語:修正あり

あと、もちろん論理演算子はand, or, not ではなく『かつ』『または』『でない』の日本語化していますので注意しておかないとうっかり間違えそうですね。

なんて懸念していたのですが、やはりこちらも一般的な and, or, not に差し代わっているようで一安心です。

■上述以外はさほど違和感ないかな

変数・配列・文字列・代入文や演算子などの表現では慣れている人ほどうっかりミスを記述してしまいそうですが、それ以外の部分ではさほど心配ないように個人的には思いました。

ただ、制御の範囲が縦線で結ぶような表現をするので、どちらかといえばCやjavaよりもPythonの字下げ構造での記述方法に慣れているほうが違和感ないと思います。

そういえばここにもひとつ、DNCLの説明にはこの字下げ構造が縦線(|)だけで表されていたのに対して、例題では範囲の下端はL字(∟)で表すように記述されていましたのでより直感的にわかりやすい記述へと修正されている様子が見て取れます。

「DNCLだけを使えるようになること」を目指すような教え方はされないと思いますが、やはりこの言語を学ぶだけでは現実には使えない、と、いうか楽しさが見当たらないです。

あくまでもプログラミングってこんな感じの流れなんですよ、ということを体験するという点までがこの言語に与えられた役割だと思いますので、徹底して記憶する必要はまったく無いけれど一般的なものとどこが違うのかというのだけは間違わないようにしておかないと点数は取れないのだろうなと強く思ったしだいです。


消えちゃった動画や写真データの復元は
安心安全な『株式会社パソコントラブル救助隊』へ。
https://hqsecure.net/