paint-brush
Тағир додани калидҳо, гум кардани арзишҳоаз ҷониби@mcsee
544 хониш
544 хониш

Тағир додани калидҳо, гум кардани арзишҳо

аз ҷониби Maximiliano Contieri4m2025/02/24
Read on Terminal Reader

Хеле дароз; Хондан

Вақте ки шумо объектҳои тағирёбандаро ҳамчун калид дар коллексияҳои ҳашшуда истифода мебаред, тағир додани онҳо шартномаҳоро вайрон мекунад.
featured image - Тағир додани калидҳо, гум кардани арзишҳо
Maximiliano Contieri HackerNoon profile picture
0-item


Тағир додани калидҳо, гум кардани арзишҳо


TL; DR: Вақте ки шумо объектҳои тағирёбандаро ҳамчун калид дар коллексияҳои ҳашшуда истифода мебаред, тағир додани онҳо шартномаҳоро вайрон мекунад.

Мушкилот 😔

  • Арзишҳои гумшуда
  • Debugging сахт
  • Вайрон кардани Принсипи Сюрпризи камтарин
  • Рафтори ғайричашмдошт

Ҳалли 😃

  1. Объектҳои тағирнашавандаро ҳамчун калид истифода баред.
  2. Барқарор кардани баробар/hashCode хуб.
  3. Майдонҳои ниҳоиро истифода баред (Агар забони шумо иҷозат диҳад)
  4. Rehash пас аз мутатсия (Ин як ҳалли аз ҳад зиёди муҳандисӣ аст)

Контекст 💬

Вақте ки шумо объектҳои тағирёбандаро ҳамчун калидҳо дар коллексияҳои ҳашшуда истифода мебаред, тағир додани калиди онҳо пас аз илова кардани объекти алоқаманд метавонад онро бебозгашт гардонад.


Ин аз он сабаб рӯй медиҳад, ки рамзи хэш тағир меёбад ва коллексия объектро дар сатили дуруст пайдо карда наметавонад.

Рамзи намунавӣ 📖

Хато ❌

 class MutableKey { int id; MutableKey(int newId) { this.id = newId; } @Override public int hashCode() { return this.id; } @Override public boolean equals(Object objectToCompare) { if (this == objectToCompare) return true; MutableKey that = (MutableKey) objectToCompare; return id == that.id; } } MutableKey key = new MutableKey(42); Map<MutableKey, String> map = new HashMap<>(); map.put(key, "Yes Album"); // The key mutates key.id = 90125; // Now you cannont retrieve the album System.out.println(map.get(key)); // Output: null

Дуруст 👉

 class ImmutableKey { private final int id; ImmutableKey(int newId) { this.id = newId; } @Override public int hashCode() { return this.id; } @Override public boolean equals(Object objectToCompare) { if (this == objectToCompare) return true; ImmutableKey that = (ImmutableKey) objectToCompare; return id == that.id; } } ImmutableKey key = new ImmutableKey(42); Map<ImmutableKey, String> map = new HashMap<>(); map.put(key, "Yes Album"); System.out.println(map.get(key)); // Output: Yes Album

Муайянкунӣ 🔍

  • Нимавтоматӣ


Шумо метавонед ин бӯйро тавассути санҷидани он, ки оё шумо объектҳои тағирёбандаро ҳамчун калид дар коллексияҳои ҳашӣ истифода мебаред, муайян кунед.


Асбобҳои автоматӣ ба монанди линтерҳо ё санҷишҳои IDE инчунин метавонанд калидҳои тағирёбандаро нишон диҳанд.

Тегҳо 🏷️

  • Тағйирпазирӣ

Сатҳи 🔋

  • Миёна

Чаро Биҷезия муҳим аст 🗺️

Тафовут байни ҷаҳони воқеӣ ва барномаи шумо муҳим аст, зеро он кафолат медиҳад, ки объектҳои шумо муносибатҳоеро, ки бояд намояндагӣ кунанд, дақиқ инъикос мекунанд.


Дар ҷаҳони воқеӣ калидҳо аксар вақт тағирнопазиранд (масалан, ID, номҳо).


Вақте ки шумо ин калидҳоро ҳамчун объектҳои тағирёбанда модел мекунед, шумо мукотибаи як ба як байни ҷаҳони воқеӣ ва барномаи худро дар MAPPER вайрон мекунед.


Ҳангоме ки шумо бо истифода аз калидҳои тағирёбанда ин дутарафаро вайрон мекунед, шумо харитаро номувофиқ мегардонед, ки боиси нокомии ҷустуҷӯ ва рафтори ғайричашмдошт мегардад.

Насли AI 🤖

Генераторҳои AI метавонанд ин бӯйро эҷод кунанд, агар онҳо объектҳои тағирёбандаро ҳамчун калид бидуни назардошти оқибатҳо тавлид кунанд.


Ин хеле кам рух медиҳад, зеро генераторҳои AI аз васвоси ибтидоӣ азоб мекашанд.

Муайянкунии AI 🥃

Генераторҳои AI метавонанд ин бӯйро бо дастурҳо барои таҳлили истифодаи объектҳои тағирёбанда дар коллексияҳои бар асоси ҳеш муайян кунанд ва мушкилоти эҳтимолиро нишон диҳанд.


Шумо метавонед ба AI дастур диҳед, ки бидуни майдонҳои ниҳоӣ ё усулҳое, ки ҳолати объектро пас аз эҷод тағир медиҳанд, ҷустуҷӯ кунад.

Онҳоро санҷед! 🛠

Дар хотир доред: Ёрдамчиёни AI ба хатогиҳои зиёд роҳ медиҳанд

Бе дастурҳои дуруст

Бо дастурҳои мушаххас

ChatGPT

ChatGPT

Клод

Клод

Мушкилот

Мушкилот

Пилот

Пилот

Дузҳо

Дузҳо

DeepSeek

DeepSeek

Мета AI

Мета AI

Хулоса 🏁

Вақте ки шумо объектҳои тағирёбандаро ҳамчун калид истифода мебаред, шумо хавфи вайрон кардани шартномаи байни ҳолати калид ва коди хэшро доред.


Барои пешгирӣ кардани ин мушкилот объектҳои тағирнашавандаро истифода баред.

Муносибатҳо 👩‍❤️‍💋‍👨

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxxiv

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxv

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxiv

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxxvi

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xviii

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxvi

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xlii

Маълумоти бештар 📕

Радд 📘

Code Smells фикри ман аст.

Қарзҳо 🙏

Акс аз Кэтрин Трипп дар Unsplash


Муҳимтарин хосияти барнома ин аст, ки оё он нияти корбарашро иҷро мекунад ё не.


CAR Hoare



Ин мақола як қисми силсилаи CodeSmell мебошад.


L O A D I N G
. . . comments & more!

About Author

Maximiliano Contieri HackerNoon profile picture
Maximiliano Contieri@mcsee
I’m a sr software engineer specialized in Clean Code, Design and TDD Book "Clean Code Cookbook" 500+ articles written

ТЕГИ овезон кунед

ИН МАКОЛА ДАР...