نمیگم اشکال داره.
میگم سینتکسش یه جوریه آدم فکر میکنه داره اون کارو اشتباه انجام میده (شبیه بقیهی clojure نیست). مخصوصا وقتی که میخواد با هش-مپ یا چیزی شبیه این کار کنه.
میخواستم کدم رو ببینید که اگه اشکالی داره یا روش بهتری برای انجام این کار هست راهنماییم کنید.
حتما باید اینطوری نوشته بشه؟ حتما باید یه anonymous function بسازم و ازش یه مپ کامل خروجی بگیرم برای ویرایش یه تیکهی کوچیک از اون مپ؟
نه. درست گفتم.
مشکل من با anonymous function نیست.
مشکلم با نحوهی کار با atom هست. میخواستم بدونم درست دارم کار میکنم یا نه.
میخواستم بدونم برای این کاری که من دارم انجام میدم، کدی که نوشتم صحیح هست یا بهتر بود یه جور دیگه مینوشتم.
ریبایند فقط با def انجام نمیشه،
اما در مورد swap! حدث میزنم که در پشت ماجرا کاری مشابه rebind کردن انجاممیده مگر اینکه کلوژر در این مورد چیز خاصی داشته باشه که من نمیدونم, باید چک کنم
من تا حالا به swap! درست نگاه نکردم، بنظر میاد که atom ها java object و قابل mutation هستند و swap! این کارو انجام میده، راستش مشکلی نداره و انگار clojure برای بالا بردن پرفرمنس ولی نگه داشتن integrity از explicit mutation هم استفاده کرده.
من به این مورد آگاه نبودم که هنوزم البته درست در موردش تحقیق نکردم، اگر شما توضیح بدین ساده میشه
من کلوژر نمیدونم اما همیشه وقتی در زبان functional نیاز به متغیر میشه برای من نشان میده یک جای کارم مشکل داره . یا درست برنامه مدل نشده یا یک داده که باید باشه نیست …
من هنوز متوجه ایراد نشدم. اتم هدفش مدیریت یه ستیت مشترک به صورت امن هست. دیتا ای که توش قرار میگیره همچنان immutable هست. swap! هم مقدار بازگذشتی فانکشن رو جایگذین مقدار قبلی می کنه.
این رو اضافه کنم که یه سری از انواع داده توی کلوژر مستقیما از انواع داده های جاوا استفاده می کنند. اما کلوژر راهی رو برای mutate کردن اونها فراهم نمی کنه. اتم هم همینجور یه placeholder هست برای نگه داشتن state مشترک که لزوما هم نباید از این روش استفاده کرد. با استفاده از swap! یا reset! اتفاقی که می افته اینه که یه مقدار immutable جایگزین یه مقدار immutable دیگه میشه تو اون placeholder اونم به روش thread safe.
میخواستم بدونم برای این کاری که میخوام انجام بدم، کدی که نوشتم صحیح هست یا نه. مثل اینکه صحیحه.
خوب یه جاهایی لازمه واقعا!
من چطوری state نگه دارم تو pure function؟
ایرادش اینه که تغییر دیتا خیلی سخته تو این کدی که من نوشتم.
میخوام بدونم راه دیگهای برای اینکار هست یا نه.
من الآن دارم با figwheel و reagent یه اپ میسازم. اولین باره که دارم با atom کار میکنم.
بر اساس منطق (swap! خروجی تابع رو میریزه تو اتم) این کدی که من نوشتم صحیح هست. ولی میخوام بدونم آیا تنها راه همینه؟ چون یه کم سخته و شبیه بقیهی چیزهای کلوژری نیست.