یکی از مشکلاتی که جامعهی Exercism با آن روبهروست این است که چگونه به افراد زیادی که راهحلهای زیادی برای تمرینهای مختلف ارائه میدهند، بازخورد معنادار بدهیم. برای اینکه دامنهی این کار بالقوه عظیم کوچکتر شود، راهحلها به «بازنمایی» نرمال میشوند. برای مثال، از میان ۵۰۰ ارسال اخیر به تمرین TwoFer در track زبان Ruby، حدود ۳۸۰ مورد یکتا به شمار میآیند (اگر موارد جزئی مثل قالببندی کد و کامنتها را نرمال کنید). اگر آنها را باز هم بیشتر نرمال کنید (مثلاً با نرمالسازی مواردی مثل اسم تابعها یا متغیرها)، این عدد باز هم کوچکتر میشود، طوری که ممکن است فقط ۲۵۰ رویکرد یکتا وجود داشته باشد. اگر جامعهی Exercism بتواند روی آن ۲۵۰ رویکرد بازخوردی بدهد، امید این است که برای حدود ۹۹٪ از همهی ارسالهای آیندهی TwoFer بازخورد معتبر آماده داشته باشیم. با تمرینهای مفهومی، فضای راهحلها حتی کوچکتر هم میشود، چون تمرینهای مفهومی عمداً طوری طراحی میشوند که به شیوهای مشخص حل شوند.
«Representer» یک تکهکد است که تنها یک مسئولیت دارد: گرفتن یک راهحل و برگرداندن یک بازنمایی نرمالشده از آن.
«بازنمایی» استخراج یک راهحل تا سرحد ذات آن است، با اسمهای نرمالشده، کامنتها، فاصلهها و غیره، که در عین حال رویکرد بهکاررفته را به شکلی یکتا مشخص میکند. دو روش مختلف برای حل یک تمرین نباید بازنمایی یکسان داشته باشند.
سادهترین Representer آن است که فقط کد منبع راهحل را برمیگرداند. اما چون هدف ما این است که راهحلهایی که فقط در جزئیات غیرضروری تفاوت دارند بازنمایی یکسان داشته باشند، Representer باید یک یا چند نرمالسازی را اعمال کند.
وقتی بازنمایی نرمالشدهی یک راهحل را داشتیم، تیمی از منتورهای تأییدشده راهحل را بررسی میکنند و در صورت نیاز دربارهاش نظر میدهند. سپس این نظرات بهطور خودکار به هر راهحل جدیدی که همان بازنمایی را داشته باشد ارسال میشوند. برای راهحلهای قدیمی که بازنمایی مطابق دارند هم اعلان فرستاده میشود.
هر زبان Representer خودش را دارد که با همان زبان نوشته شده است. وبسایت نقش هماهنگکننده را میان Representer و ارسالهای یادگیرندگان ایفا میکند.
هر Representer در سازمان GitHub شرکت Exercism، در مخزنی به اسم <track_slug>-representer قرار دارد (برای مثال exercism/ruby-representer).
میتوانید Representerهای موجود را اینجا ببینید.
اگر میخواهید در کمک به یک Representer موجود مشارکت کنید، لطفاً در مخزن آن یک issue باز کنید و بپرسید از کجا میتوانید کمک کنید. اگر میخواهید برای زبانی که هنوز Representer ندارد یکی بسازید، لطفاً دستورالعملهای ساخت یک Representer را دنبال کنید.
برای یادگیری بیشتر دربارهی ساخت یک Representer میتوانید از این مستندات استفاده کنید: