Skip to content

Commit 60c958c

Browse files
authored
Update article.md
Minor typo fixes.
1 parent 2898ed4 commit 60c958c

File tree

1 file changed

+17
-18
lines changed

1 file changed

+17
-18
lines changed

1-js/04-object-basics/02-object-copy/article.md

+17-18
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,13 @@ let message = "Hello!";
1212
let phrase = message;
1313
```
1414

15-
As a result we have two independent variables, each one is storing the string `"Hello!"`.
1615
এর ফলে আমরা দুটি স্বাধীন ভেরিয়েবল আছে, প্রতিটি "হেলো" স্ট্রিংটি সংরক্ষণ করছে ।
1716

1817
![](variable-copy-value.svg)
1918

2019
অবজেক্ট রা এমন নয়।
2120

22-
** একটি ভেরিএবল অবজেক্ট কে সংরক্ষণ করে না, বরং এর ঠিকানা সংরক্ষণ করে, অন্য কথায় এটির একটি "রেফারেন্স" *
21+
** একটি ভেরিএবল অবজেক্ট কে সংরক্ষণ করে না, বরং এর ঠিকানা সংরক্ষণ করে, অন্য কথায় এটির একটি "রেফারেন্স" **
2322

2423
অবজেক্ট এর ছবিঃ
2524

@@ -33,35 +32,35 @@ let user = {
3332

3433
এখানে, বস্তুটি মেমোরির কোথাও সংরক্ষণ করা হয়েছে। এবং ভেরিয়েবল `user` এর কাছে এর রেফারেন্স আছে।
3534

36-
** যখন কোনও বস্তুর ভেরিয়েবল কপি করা হয় - রেফারেন্সটি কপি হয়, বস্তুটি নকল হয় না * **
35+
** যখন কোনও বস্তুর ভেরিয়েবল কপি করা হয় - রেফারেন্সটি কপি হয়, বস্তুটি নকল হয় না **
3736

3837
যেমন :
3938

4039
```js no-beautify
4140
let user = { name: "John" };
4241

43-
let admin = user; // রেফারেন্স করই হলো
42+
let admin = user; // রেফারেন্স কপি হলো
4443
```
4544

4645
এখন আমাদের দুটি ভেরিয়েবল রয়েছে, প্রত্যেকেই একই বস্তুর রেফারেন্স:
4746

4847
![](variable-copy-reference.svg)
4948

50-
আমরা এই দুটি ভেরিএবল এর যেকোনো টি ব্যাবহার করে অবজেক্ট টি এক্সেস করতে পারি ও এর ভেতরের কন্টেন্ট বা ডেটা গুলি পরিবর্তন করতে পারি।
49+
আমরা এই দুটি ভেরিয়েবল এর যেকোনো টি ব্যাবহার করে অবজেক্ট টি এক্সেস করতে পারি ও এর ভেতরের কন্টেন্ট বা ডেটা গুলি পরিবর্তন করতে পারি।
5150

5251
```js run
5352
let user = { name: 'John' };
5453

5554
let admin = user;
5655

5756
*!*
58-
admin.name = 'Pete'; // এডমিন রেফারেন্সে এর মাদ্ধ্যমে পরিবর্তন হোল
57+
admin.name = 'Pete'; // এডমিন রেফারেন্সের এর মাধ্যমে পরিবর্তন হলো
5958
*/!*
6059

61-
alert(*!*user.name*/!*); // 'Pete', changes are seen from the "user" reference
60+
alert(*!*user.name*/!*); // 'Pete', পরিবর্তন টি "user" রেফারেন্স থেকে দেখা যাচ্ছে
6261
```
6362
64-
উপরের উদাহরণটি প্রমাণ করে যে এখানে কেবল একটি অবজেক্ট রয়েছে।যেন আমাদের একি কক্ষের দুটি চাবি আছে আর আমরা একটি চাবি (`admin`) দিয়ে কক্ষে প্রবেশ করেছি ও অন্যটি (`user`) দিয়ে কক্ষের ভেতরে উকি দিয়েছি।
63+
উপরের উদাহরণটি প্রমাণ করে যে এখানে কেবল একটি অবজেক্ট রয়েছে। যেন আমাদের একি কক্ষের দুটি চাবি আছে আর আমরা একটি চাবি (`admin`) দিয়ে কক্ষে প্রবেশ করেছি ও অন্যটি (`user`) দিয়ে কক্ষের ভেতরে উকি দিয়েছি।
6564
6665
## রেফারেন্স এর মাধ্যমে তুলনা
6766
@@ -88,7 +87,7 @@ let b = {}; // দুটি স্বাধীন অবজেক্ট
8887
alert( a == b ); // false
8988
```
9089
91-
`obj1 > obj2` এর মত তুলনা এর জন্য or অথবা কোন প্রিমিটিভ এর সাথে তুলনা করার জন্য `obj == 5`, অবজেক্ট কে প্রিমিটিভ এ রূপান্তর করা হয়। অবজেক্ট গুলোকে কিভাবে তুলনা করা হয় তা সম্পর্কে আমরা শিগ্রই জানব, কিন্তু সত্যি বলতে এই ধরনের তুলনা খুব কমি করা হয়, সাধারণত ভুলক্রমে।
90+
`obj1 > obj2` এর মত তুলনা এর জন্য অথবা কোন প্রিমিটিভ এর সাথে তুলনা করার জন্য `obj == 5`, অবজেক্ট কে প্রিমিটিভ এ রূপান্তর করা হয়। অবজেক্ট গুলোকে কিভাবে তুলনা করা হয় তা সম্পর্কে আমরা শিগ্রই জানব, কিন্তু সত্যি বলতে এই ধরনের তুলনা খুব কমই করা হয়, সাধারণত ভুলক্রমে।
9291
9392
## ক্লোন করা ও মিলিত করা, Object.assign
9493
@@ -99,7 +98,7 @@ alert( a == b ); // false
9998
তাও সম্ভব কিন্তু একটু কঠিন, কারণ এই কাজ করার জন্য জাভাস্ক্রিপ্ট এর কোন অন্তর্নির্মিত মেথড নেই।
10099
আসলে এটি খুব কমই প্রয়োজন হয়। রেফারেন্সে কপি করাই বেশিরভাগ সময় যথেষ্ট।
101100
102-
কিন্তু আমরা যদি আসলেই এটি চাই তাহলে আমাদের নতুন একটি অবজেক্ট বানাতে হবে, ও মুল অবজেক্ট তির সম্পূর্ণ কাঠামো কে নকল করে এর সকল প্রপার্টির প্রিমিটিভ স্তরে প্রতিলিতি তৈরি করতে হবে।
101+
কিন্তু আমরা যদি আসলেই এটি চাই তাহলে আমাদের নতুন একটি অবজেক্ট বানাতে হবে, ও মুল অবজেক্ট টির সম্পূর্ণ কাঠামো কে নকল করে এর সকল প্রপার্টির প্রিমিটিভ স্তরে প্রতিলিতি তৈরি করতে হবে।
103102
104103
যেমন:
105104
@@ -138,19 +137,19 @@ Object.assign(dest, [src1, src2, src3...])
138137
- এটি মুল অবজেক্ট এর সকল প্রপার্টি `src1, ..., srcN` টার্গেট `dest` এ কপি করে। অন্য কথায়, দ্বিতীয় আর্গুমেন্ট থেকে বাকি সকল আর্গুমেন্ট এর প্রপার্টি গুলো প্রথম অবজেক্ট এ কপি হয়।
139138
- এই কল টি `dest` কে রিটার্ন করে।
140139
141-
আমরা এটি ব্যাবহার করে একাধিক অবজেক্ট এ একটি অবজেক্ট এ মিলিত করতে পারে:
140+
আমরা এটি ব্যাবহার করে একাধিক অবজেক্টকে একটি অবজেক্ট এ মিলিত করতে পারি:
142141
```js
143142
let user = { name: "John" };
144143

145144
let permissions1 = { canView: true };
146145
let permissions2 = { canEdit: true };
147146

148147
*!*
149-
// copies all properties from permissions1 and permissions2 into user
148+
// permissions1 ও permissions2 এর সকল প্রপার্টি কে user এ কপি করে
150149
Object.assign(user, permissions1, permissions2);
151150
*/!*
152151

153-
// now user = { name: "John", canView: true, canEdit: true }
152+
// এখন user = { name: "John", canView: true, canEdit: true }
154153
```
155154
156155
কপি করা প্রপার্টি যদি ইতিমধ্যেই থেকে থাকে থাকলে এটি ওভাররাইট হয়ে যাবে:
@@ -160,7 +159,7 @@ let user = { name: "John" };
160159

161160
Object.assign(user, { name: "Pete" });
162161

163-
alert(user.name); // now user = { name: "Pete" }
162+
alert(user.name); // এখন user = { name: "Pete" }
164163
```
165164
166165
আমরা `for..in` এর জায়গায় `Object.assign` ব্যাবহার করে সাধারণ ক্লোনিং করতে পারি :
@@ -180,7 +179,7 @@ let clone = Object.assign({}, user);
180179
181180
## অভ্যন্তরীণ ক্লোনিং (Nested cloning)
182181
183-
এতখ্যন পর্জন্ত আমরা ধরে নিয়েছিলাম যে `user` এর সকল প্রপার্টি ই প্রিমিটিভ । কিন্তু প্রপার্টি গুলো তো অন্যান্য অবজেক্ট এর রেফারেন্স ও হতে পারে । সেক্ষেত্রে আমরা কি করবো?
182+
এতক্ষণ পর্যন্ত আমরা ধরে নিয়েছিলাম যে `user` এর সকল প্রপার্টি ই প্রিমিটিভ । কিন্তু প্রপার্টি গুলো তো অন্যান্য অবজেক্ট এর রেফারেন্স ও হতে পারে । সেক্ষেত্রে আমরা কি করবো?
184183
185184
যেমন:
186185
```js run
@@ -217,14 +216,14 @@ user.sizes.width++; // একটি জায়গা থেকে প্র
217216
alert(clone.sizes.width); // 51, অন্য জায়গায় রেসাল্ট দেখা
218217
```
219218
220-
এটি সমাধান করার জন্য আমাদের একটি ক্লোনিং লুপ ব্যাবহার করা লাগবে যা `user[key]` এর প্রত্যেক মান কে প্রিক্ষা করবে, এবং যদি এটি অবজেক্ট হয়, তাহলে এর স্ট্রাকচার কেও কপি করবে। একে বলে "ডিপ ক্লোনিং".
219+
এটি সমাধান করার জন্য আমাদের একটি ক্লোনিং লুপ ব্যাবহার করা লাগবে যা `user[key]` এর প্রত্যেক মান কে পরীক্ষা করবে, এবং যদি এটি অবজেক্ট হয়, তাহলে এর স্ট্রাকচার কেও কপি করবে। একে বলে "ডিপ ক্লোনিং"
221220
222221
আমরা রিকার্সন ব্যাবহার করে এটি তৈরি করতে পারি অথবা ইতিমধ্যেই বাস্তবায়িত একটি ব্যাবহার করতে পারি, যেমন [lodash](https://lodash.com) এর [_.cloneDeep(obj)](https://lodash.com/docs#cloneDeep) ফাংশন।
223222
224223
## সংক্ষিপ্ত
225224
226225
অবজেক্ট গুলো রেফারেন্স এর মাধ্যমে কপি হয়। অন্য কথায়, একটি ভেরিয়েবল অবজেক্ট এর মান সংরক্ষণ করে না , বরং একটি রেফারেন্স (মেমোরি এড্রেস) সংরক্ষণ করে। সুতরাং এই ধরনের ভেরিয়েবল কে কপি করলে অবজেক্ট কপি হয় না বরং রেফারেন্স কপি হয়।
227226
228-
রেফারেন্সে এর মাধ্যমে করে সকল কাজ (যেমন প্রপার্টি যোগ করা/মোছা) একই অবজেক্ট এ সম্পাদিত হয়।
227+
কপি করা রেফারেন্সে এর মাধ্যমে করে সকল কাজ (যেমন প্রপার্টি যোগ করা/মোছা) একই অবজেক্ট এ সম্পাদিত হয়।
229228
230-
একটি "আসল কপি" (ক্লোন) তৈরি করতে আমরা ব্যাবহার করতে পারি `Object.assign` যাকে "শ্যালো কপি"(অভ্যন্তরীণ অবজেক্ট রেফারেন্সের মাধ্যমে কপি হয়) বলা হয় অথবা আমরা ব্যাবহার করতে পারি [_.cloneDeep(obj)](https://lodash.com/docs#cloneDeep) এর মত "ডিপ ক্লোনিং" ফাংশন।
229+
একটি "বাস্তব কপি" (ক্লোন) তৈরি করতে আমরা ব্যাবহার করতে পারি `Object.assign` যাকে "শ্যালো কপি"(অভ্যন্তরীণ অবজেক্ট রেফারেন্সের মাধ্যমে কপি হয়) বলা হয় অথবা আমরা ব্যাবহার করতে পারি [_.cloneDeep(obj)](https://lodash.com/docs#cloneDeep) এর মত "ডিপ ক্লোনিং" ফাংশন।

0 commit comments

Comments
 (0)