Try using print debugging as a learning tip

Godot
cacapon

I think that the lesson here may be difficult for beginners because of the new techniques such as for statements and dictionary type access.

I believe the reason for this is that the contents of variables are not visible.

So, I would like to introduce debugging by print statement as a method I used this time to easily check the contents.

I will use the create_buttons() function as an example.

func create_buttons(buttons_data: Dictionary) -> void:
    for text in buttons_data:                        #Q1: What's in the text?
        var button := Button.new()
        button.text = text
        buttons_column.add_child(button)
        var target_line_id: int = buttons_data[text] #Q2: What's in the buttons_data?

        button.connect("pressed", self, "show_line", [target_line_id])

As I stated in my comment when coding this area, I was not sure what was in the two sections.

  1. What is the content of text?
  2. Buttons_data is a dictionary, but what kind of data is being passed?

So I inserted print() in the following two places to check the contents.

func create_buttons(button_data: Dictionary) -> void:
	for text in button_data:
		print(text) # DEBUG
		var button := Button.new()
		button.text = text
		buttons_column.add_child(button)
		print(button_data) # DEBUG
		var target_line_id: int = button_data[text]

		button.connect("pressed",self, "show_line",[target_line_id])

When the scene is executed in this state, a message is output to the output field of the editor.


This time the message was as follows. 

  1. Let me sleep a little longer (1st output of text)
  2. {Let me sleep a little longer:2, Let's do it!:1} (1st output of button_data)
  3. Let's do it! (2nd output of text)
  4. {Let me sleep a little longer:2, Let's do it!:1} (2nd output of button_data)

From the above message, my original question was resolved as follows.

Q1 What is the content of text?
A: The part that corresponds to the key of Buttons in the dialogue.

Q2 buttons_data is a dictionary, but what kind of data is passed?
A: Data whose key is a message and whose value is a number.

If you understand the above, you may be able to advance your understanding of the program code, as in "I see, button_data[text] passes value with text as the key, so you are taking the ID for the next jump from here.

Print debugging is an easy method for beginners to handle, so use it as a hint.

---

ここのレッスンはfor文や辞書型のアクセスなど新しいテクニックが増えてきているので初学者には難しく感じるところではないかと思います。

その理由としては変数の中身が見えていないからではないかと考えております。

そこで、今回私が利用した手軽に中身が確認できる方法としてプリント文によるデバッグを紹介します。

私が詰まったcreate_buttons()関数を例に説明します。

(コード例は英文内参照)

私はこのあたりをコーディングするときにコメントに書いた通り、二つの箇所の中身がよくわかっておりませんでした。

  • textの中身は何か?
  • buttons_dataは辞書だけどどのようなデータが渡されているのか?

そこで、中身を確認するため次の二箇所にprint()を挿入します。

(コード例は英文参照)

この状態でシーンを実行すると、エディターの出力欄にメッセージが出力されます。

(出力例は英文参照)

今回のメッセージを見ると次のようになっていました。 

  1. Let me sleep a little longer (textの1回目の出力)
  2. {Let me sleep a little longer:2, Let's do it!:1} (button_dataの1回目の出力)
  3. Let's do it! (textの2回目の出力)
  4. {Let me sleep a little longer:2, Let's do it!:1} (button_dataの2回目の出力)


上のメッセージから元々疑問に思っていたことは次のように解決できました。

Q1 textの中身は何か?

A: dialogueのButtonsのキーにあたる部分

Q2 buttons_dataは辞書だけどどのようなデータが渡されているのか?

A: キーがメッセージでバリューが数字のデータ


上のように分かると「なるほど、button_data[text]ではtextをキーにvalueを渡しているので、次にジャンプするIDをここから取っているんだな」のように、プログラムのコードの理解を進められる場合があります。


プリントデバッグは初心者にも扱いやすい方法なので、ヒントとして使ってみてください。

5 loves
Reply
  • Nathan Lovato replied

    Excellent breakdown, thank you! It's also valuable feedback for us. I'm taking note of this as in the upcoming remake, we're planning to move this part a little later in the course, but also try to make it more accessible.

    3 loves