Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Services can trace programs. #48

Closed
wants to merge 2 commits into from
Closed

[WIP] Services can trace programs. #48

wants to merge 2 commits into from

Conversation

taisii
Copy link
Collaborator

@taisii taisii commented Feb 24, 2024

Close #46

Self Check

  • I've confirmed All checks have passed on PR page. (You may leave this box unchecked due to long workflows.)
    • PR title follows Angular's commit message format.
      • PR title doesn't have WIP:.
    • All tests are passed.
      • Test command (e.g., yarn test) is passed.
      • Lint command (e.g., yarn lint) is passed.
  • I've reviewed my changes on PR's diff view.

@taisii
Copy link
Collaborator Author

taisii commented Feb 26, 2024

selectCharacterVariablesをうまく機能させられなかったのでアドバイスをお願いしたいです。
現在、Slackで坂本先生が示していた方針で各行における変数の値を取ってこようとしています。
はじめに=が含まれる行についてlog関数を追加し、その時の変数の値を取ってこれるようにしました。(character.moveFoward()などへの対応はこれからです。)
取ってきた変数の値からHistoryを生成するためにはキャラクタ変数とそれ以外の変数を分ける必要があるのですが、うまく分けることができず、全てキャラクタ以外の変数であると認識されてしまいます。
どこが原因でこのようなことになっているのかわからなかったので教えていただきたいです。
traceToVariablesList関数の書き方を改善する必要があると思っています。

@taisii taisii requested a review from ykit00 February 26, 2024 07:45
@taisii taisii changed the title [WIP] サービスはプログラムをトレースできる [WIP] Services can trace programs. Feb 26, 2024
Copy link
Collaborator

@ykit00 ykit00 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@taisii キャラクタ変数とそれ以外の変数を分ける部分についてコメントしましたー

Comment on lines +66 to +68
JSON.stringify(traceList);
`.replaceAll(/\s+/g, ' ');
const ret: Trace[] = JSON.parse(eval(codeForTracing));
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ここのタイミングでJSON化とパースを経由しているため、variableValue はクラスのインスタンスではなく、ただのオブジェクトになっていますね。

const { variableName, variableValue } = traceList[index];
const variablesIndex = variables.findIndex((variable) => variable.name === variableName);
if (variablesIndex === -1) {
if (variableValue instanceof CharacterClass) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

variableValue.constructor.name -> Object になるので True にならなさそうです。
オブジェクトのまま検証する場合、ユーザー定義型ガード?のようなもので型を使って検証すればうまくいくかもしれません。

e.g.

const isCharacter = (value: unknown): value is Character => {
  const characterValue = value as Character;
  return typeof characterValue.name === 'string' &&
    typeof characterValue.x === 'number' &&
    typeof characterValue.y === 'number' &&
    typeof characterValue.direction === 'string' &&
    typeof characterValue.color === 'string' &&
    typeof characterValue.penDown === 'boolean';
}

@exKAZUu
Copy link
Member

exKAZUu commented Mar 31, 2024

別の方法でトレースを実現したので閉じます。

@exKAZUu exKAZUu closed this Mar 31, 2024
@exKAZUu exKAZUu deleted the 46-trace branch March 31, 2024 14:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

サービスはプログラムをトレースできる
3 participants