MyEnigma

とある自律移動システムエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

各プログラミング言語における変数名と変数の値を簡単に出力する方法まとめ


情熱プログラマー ソフトウェア開発者の幸せな生き方

目次

はじめに

先日の記事で、

Pythonにおけるロギングの方法を紹介しましたが、

myenigma.hatenablog.com

ロギングで一番よく実施するのが、

ある変数名と変数値を出力することです。

 

例えばPythonで、

あるxという変数があり、その変数の値が100である場合、

通常のprint関数を使うと、

100

と表示されます。

しかし、そのときにはその表示された値がxのものであることを覚えているため、

問題ありませんが、後日アプリケーションのデバックをするときには、

その出力がどの変数であるかはおそらく覚えていないので、

最低では、ログや標準出力には

x = 100

と表示させておきたくなります。

 

上記のような処理は、プログラミング中には大量にコーディングすることになるので、

できるだけ、簡単にコーディングしたいものです。

 

そこで、今回は自分がよく使用しているプログラミング言語において、

上記の内容を簡単に実施する方法をまとめておきたいと思います。

 

Python

Pythonでは、

下記のツイートの通り、Python 3.8から、

f-stringで最後でイコールをつけると

変数名や評価式が表示されます。

Julia

Juliaでは、

こちらもデフォルトの機能として、@showマクロを使うと、

変数名や評価式が結果とともに表示されます。

f:id:meison_amsl:20200509142833p:plain

 

Shell script

Shell scriptでは、残念ながらデフォルトでは

このような機能は実装されていないようなので、

下記のようにdubugといった関数を定義することで実現できます。

f:id:meison_amsl:20200509205422p:plain

 

C++

C++の場合は、

マクロを使えば、変数名と変数の値を簡単に出力できる。

このようなマクロはデフォルトでは、存在しないようなので

Shell scriptと同様、自分で定義する必要あり。

f:id:meison_amsl:20200509211531p:plain

 

Java

Javaの場合、

変数というよりクラスのフィールドを表示したくなりますが、

リフレクションを使ってtoStringをオーバライドすることで、

名前と変数を表示させることができます。

Javaの場合、マクロも無いので、

これを全部のクラスでやるのはかなり大変ですが。。

f:id:meison_amsl:20200509221112p:plain

 

IDEの機能を使う

プログラミング言語の機能だけで、

変数名と変数の値を簡単に出力するのは、

C++やJavaのような静的言語では難しいですが、

そんなときは、IDEの機能を使うことで

簡単にコーディングできるようになります。

 

例えば、JetbrainsのJava IDEであるInteliJの場合、

myenigma.hatenablog.com

入力支援であるLive Template機能の中に、

pleiades.io

soutvというテンプレートがあります。

これは、soutvとエディタで入力したあと、

変換ボタンを押すと、変数名を入力するだけで、

変数名と変数を出力するSystem.out.printlnを自動入力してくれます。

 

Java以外にも、それぞれのIDEで

上記のような入力支援機能を利用することで、

言語自身が対応していなくても、

簡単に変数名と変数値を出力するコードを簡単にコーディングできます。

 

参考資料

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com


情熱プログラマー ソフトウェア開発者の幸せな生き方

MyEnigma Supporters

もしこの記事が参考になり、

ブログをサポートしたいと思われた方は、

こちらからよろしくお願いします。

myenigma.hatenablog.com