#mobile_programming
#flutter
فيه معلومتين حابب أتكلم فيهم معظم الناس مش بتهتم بيهم هما ال
Immutability in strings and string pool in dart
خليني في البداية أقولك إيه ال string pool
String pooling is an optimization technique where the run time keeps a pool of strings.
يعني لما بتيجي تعمل string جديد
The runtime first checks the pool to see if an identical string already exits
يعني لو أنا مثلا عملت كده
string a="hello" ;
string b="hello" ;
في الحالة دي هو مش بيروح يعمل string جديد لا هو بيروح يشوف هل فيه string بنفس الحروف دي لو آه خلاص بيروح يشاور علي نفس اللوكيشن
وبالتالي لو عملت print(identical(a, b))
هتلاقي ال output true عشان آلأتنين بيشاورو علي نفس الاوبجيكت.
========================
تآني حاجة خلينا نعرف يعني إيه strings are immutable
و ده معناه إن مجرد ما ال string حصله create مقدرش أغير ال content بتاعه طب إزاي الكلام ده يعني أنا مقدرش أقول
String s="a"
بعدين ارجع أقول
s=" amir"
لا ينفع بس في الحقيقة إنت مش بتغير ال content بتاع نفس ال object الل بيحصل إنك بتروح تعمل object جديد و بتخلى يشاور عليه
و حتى الناس الل عارفة مش بتاخد بالها إنك ممكن في case معينة ده يأثر علي ال performance بتاعك
علي سبيل المثال لو عندك تعديلات كتير علي ال string زي
String result = "'';
for (var i = 0; i < 10000; i++) {
result += 'a';
}
إنت متخيل إنك في كل مرة بتروح تعمل string جديد و ده بيأثر علي ال performance بتاعك سواء time او memory
عشان كده في الحالة دي ممكن نلجا لل string buffer وده بيبقي mutable عآدى يعني أقدر اغير فيه علي نفس الاوبجت ولما أخلص أروح أعمل toString و ساعتها بس هيcreate new string
علي سبيل المثال
var buffer = StringBuffer();
for (var i = 0; i < 10000; i++) {
buffer.write('a');
}
String finalResult = buffer.toString();
باختصار لو عندك عدد كبير من التعديلات استخدم stringBuffer غير كده استعمل string عآدى
#mobile_programming
#flutter
فيه معلومتين حابب أتكلم فيهم معظم الناس مش بتهتم بيهم هما ال
Immutability in strings and string pool in dart
خليني في البداية أقولك إيه ال string pool
String pooling is an optimization technique where the run time keeps a pool of strings.
يعني لما بتيجي تعمل string جديد
The runtime first checks the pool to see if an identical string already exits
يعني لو أنا مثلا عملت كده
string a="hello" ;
string b="hello" ;
في الحالة دي هو مش بيروح يعمل string جديد لا هو بيروح يشوف هل فيه string بنفس الحروف دي لو آه خلاص بيروح يشاور علي نفس اللوكيشن
وبالتالي لو عملت print(identical(a, b))
هتلاقي ال output true عشان آلأتنين بيشاورو علي نفس الاوبجيكت.
========================
تآني حاجة خلينا نعرف يعني إيه strings are immutable
و ده معناه إن مجرد ما ال string حصله create مقدرش أغير ال content بتاعه طب إزاي الكلام ده يعني أنا مقدرش أقول
String s="a"
بعدين ارجع أقول
s=" amir"
لا ينفع بس في الحقيقة إنت مش بتغير ال content بتاع نفس ال object الل بيحصل إنك بتروح تعمل object جديد و بتخلى يشاور عليه
و حتى الناس الل عارفة مش بتاخد بالها إنك ممكن في case معينة ده يأثر علي ال performance بتاعك
علي سبيل المثال لو عندك تعديلات كتير علي ال string زي
String result = "'';
for (var i = 0; i < 10000; i++) {
result += 'a';
}
إنت متخيل إنك في كل مرة بتروح تعمل string جديد و ده بيأثر علي ال performance بتاعك سواء time او memory
عشان كده في الحالة دي ممكن نلجا لل string buffer وده بيبقي mutable عآدى يعني أقدر اغير فيه علي نفس الاوبجت ولما أخلص أروح أعمل toString و ساعتها بس هيcreate new string
علي سبيل المثال
var buffer = StringBuffer();
for (var i = 0; i < 10000; i++) {
buffer.write('a');
}
String finalResult = buffer.toString();
باختصار لو عندك عدد كبير من التعديلات استخدم stringBuffer غير كده استعمل string عآدى