როგორ მუშაობენ გაფართოების ფუნქციები Kotlin-ში?
sobes.tech AI
პასუხი AI-სგან
გაგრძელების ფუნქციები საშუალებას აძლევს დაამატოთ ახალი ფუნქციები არსებულ კლასებს მემკვიდრეობის ან დეკორატორების გამოყენების გარეშე.
იგი გამოაცხადება ხდება წინსართით, რომელიც მიუთითებს გაფართოებულ ტიპს:
fun String.removeFirstChar(): String {
// this ეხება გაფართოებული ტიპის ობიექტს (String)
return this.substring(1)
}
გაფართოების ფუნქციის გამოძახებისას, კომპილატორი მას გარდაქმნის სტატიკურ მეთოდად, რომელიც პირველ არგუმენტად იღებს გაფართოებულ ობიექტს:
// გაფართოების ფუნქციის გამოძახება
val original = "Hello"
val modified = original.removeFirstChar()
// კომპილატორი ამ ცვლილებას დაახლოებით ასე გარდაქმნის:
// val modified = StringExtensionsKt.removeFirstChar(original)
(სადაც StringExtensionsKt არის სტატიკურ მეთოდებსა და კლასის სახელწოდება, თუ გაფართოების ფუნქცია კლასის გარეთ არის.)
გაფართოების ფუნქციები არ იცვლიან კლასს. ისინი მხოლოდ სინტაქსური შაქარს წარმოადგენენ სტატიკურ მეთოდებსა და გამოძახებისათვის. მათ არ აქვთ წვდომა პირად ან დაცულ წევრებზე გაფართოებულ კლასში.
მთავარი უპირატესობა — უფრო წასაკითხი კოდი, რომელიც იმიტირებს ობიექტზე ორიენტირებულ პროგრამირებას, ამავდროულად თავიდან აცილებს მემკვიდრეობის პრობლემებს.
ნებისმიერი კლასი შეიძლება გაფართოვდეს, მათ შორის სტანდარტული ბიბლიოთეკები და Java კლასები. გაფართოების ფუნქციები შეიძლება იყოს სხვა კლასის წევრები, მაშინ ისინი მხოლოდ ამ კლასის შიგნით იძახიან.
მოწესრიგების და კონფლიქტების გადაჭრისას, უპირატესობა ენიჭება კლასის წევრ ფუნქციებს, ვიდრე გაფართოების ფუნქციებს. თუ არსებობს რამდენიმე გაფართოების ფუნქცია ერთსა და იმავე სიგნატურით, ის, რომელიც ადგილობრივად არის გამოქვეყნებული (შესაბამისი სქოპში), უპირატესობას სარგებლობს.