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

a-tiny-js-world #390

Merged
merged 4 commits into from
Sep 17, 2022
Merged

a-tiny-js-world #390

merged 4 commits into from
Sep 17, 2022

Conversation

kuslosolodka
Copy link
Contributor

A-Tiny-JS-World

Demo |
Code base

The code is submitted in a dedicated feature branch.

Only code files are submitted.

Please, review.

@github-actions
Copy link

github-actions bot commented Sep 2, 2022

Hey!

Congratulations on your PR! 😎😎😎

Let's do some self-checks to fix most common issues and to make some improvements to the code before reviewers put their hands on the code.

Go through the requirements/most common mistakes listed/linked below and fix the code as appropriate.

If you have any questions to requirements/common mistakes feel free asking them here or in Students' chat.

When you genuinely believe you are done put a comment stating that you have completed self-checks and fixed code accordingly.

Also, be aware, that if you would silently ignore this recommendation, a mentor can think that you are still working on fixes. And your PR will not be reviewed. 😒

A Tiny JS World -- (pre-OOP) exercise check list

Relates to Object-Oriented JavaScript task.

Check-list - definition of done

  • Code is DRY, which means that whenever you see a pattern in your code those should be eliminated as much as possible. Examples:
    • print(dog); print(cat); etc ... should be refactored employing Array.forEach as the least
    • `${obj.legs}; ${obj.name}; etc...` (yes, strings are also code) must be refactored employing appropriate Array methods
  • Object methods like keys, values, entries shouldn't be used when a particular order is required as these do not guarantee any particular order of keys/values. Same refers to for...of and for...in when applied to objects.
    Hint: List explicitly the properties used to form an object presentation string.
  • Men and women belong to the same biological species.
  • ES6 class or prototype-based OO syntax aren't used.

Universal recommendations:

  • Give variables and functions meaningful names. Avoid generic names like item, element, key, object, array or their variations. Exception: helper functions that are specifically and intentionally designed to be multipurpose.
  • Function names should start with a verb as they denote actions; variables are normally nouns; boolean variables/functions start with is, does, has etc; variable containing multiple entities and functions returning lists contain entity name in plural form.
  • Have consistent code style and formatting. Employ Prettier to do all dirty work for you.
  • Use common sense or seek for an advice whenever requirements look ambiguous or unclear.

Also take a note of the requirements above and follow them in all your future projects.

By the way, you may proceed to the next task before this one is reviewed and merged.

Sincerely yours,
Submissions Kottachecker 😺

@yaripey yaripey self-assigned this Sep 12, 2022
Copy link

@yaripey yaripey left a comment

Choose a reason for hiding this comment

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

Nice work! Let's improve it. Check the comments below.

saying: cat["saying"],
};
dog.friend = `${woman.name},${man.name},${cat.name}`;
cat.friend = undefined;
Copy link

Choose a reason for hiding this comment

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

undefined is a default value for some variable that was not given a value or for places where we wait for a value, but don't get it as a result of some mistake or something like that. If you want to specify something as "nothing" or "empty" use null. But of course, the end user of the app/website should see neither null nor undefined. You release your undefined to the eyes of the user, and that is a mistake. For the sake of this task, animals are allowed to have 0 hands, for example. And if someone doesn't have friends - you should just ignore that property.

hands: 2,
saying: cat["saying"],
};
dog.friend = `${woman.name},${man.name},${cat.name}`;
Copy link

Choose a reason for hiding this comment

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

friend should be plural, I guess. And it should be an array since here is where you keep your "raw" data, a model if you will. Then some other code should pick this data and format it to display.

gender: "female",
legs: 2,
hands: 2,
saying: cat["saying"],
Copy link

Choose a reason for hiding this comment

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

Catwoman's saying should change if we change the cat's saying any time. Does yours?

const inhabitants = [dog, cat, woman, man, cat_woman];
inhabitants.map((item) => {
let res = "";
for (let key in item) {
Copy link

Choose a reason for hiding this comment

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

You should use Array.forEach and other similar methods everywhere where it's possible. It increases the readability of the code a lot. Also, don't rely on cycling through keys in the objects, you never know for sure which keys are present or in which order. Find a way to specify the keys by hand and then get values from objects.

*/
const inhabitants = [dog, cat, woman, man, cat_woman];
inhabitants.map((item) => {
let res = "";
Copy link

Choose a reason for hiding this comment

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

Instead of stacking values into the string like that, it's cleaner to prepare some values and then .join() them.

gender: "female",
legs: 2,
hands: 2,
saying: cat.saying,
Copy link

Choose a reason for hiding this comment

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

Nice work! Your catwoman's saying is still not connected to cat's saying. Yes, catwoman says what cat said initially, but if we change cat's saying later in code, catwoman will not change her saying accordingly.

Copy link

@yaripey yaripey left a comment

Choose a reason for hiding this comment

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

Yes, this is one way of doing so. I'm going to approve that, but be aware that following this, the Object.setPrototypeOf is a very slow operation and you could use Object.create to achieve the same goal. You could've also just used bind. That's just for the future, look into those methods. Great work!

@yaripey yaripey merged commit 1045216 into kottans:main Sep 17, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants