Swift Academy · पाठ

स्वतंत्र एक्सप्रेशन मैक्रो लिखना

SwiftSyntax और MacroExpansion से एक सरल #stringify मैक्रो लागू करें।

पाठ 2, कुल 4 में से13 चरण

स्वतंत्र एक्सप्रेशन मैक्रो लिखना, CoddyKit पर Swift Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Swift Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

प्रोजेक्ट सेटअप

मैक्रो SwiftSyntax का उपयोग करने वाले अलग Swift पैकेज लक्ष्य में रहते हैं, जिसका प्रकार .macro होता है।

// Package.swift (excerpt)
.macro(
  name: "MyMacros",
  dependencies: [
    .product(name: "SwiftSyntaxMacros", package: "swift-syntax"),
    .product(name: "SwiftCompilerPlugin", package: "swift-syntax")
  ]
)

मैक्रो घोषणा

क्लाइंट उसे कॉल कर सकें, इसके लिए मैक्रो का हस्ताक्षर किसी लाइब्रेरी लक्ष्य में घोषित कीजिए।

@freestanding(expression)
public macro stringify<T>(_ value: T) -> (T, String)
  = #externalMacro(module: "MyMacros", type: "StringifyMacro")

मैक्रो प्रकार का कार्यान्वयन

ExpressionMacro के अनुरूप बनकर और ExprSyntax लौटाकर मैक्रो का कार्यान्वयन कीजिए।

import SwiftSyntaxMacros
import SwiftSyntax

struct StringifyMacro: ExpressionMacro {
  static func expansion(
    of node: some FreestandingMacroExpansionSyntax,
    in context: some MacroExpansionContext
  ) throws -> ExprSyntax {
    guard let arg = node.arguments.first?.expression else {
      throw MacroError.message("Need an argument")
    }
    return "(\(arg), \(literal: arg.description))"
  }
}

प्लगइन पंजीकृत करना

एक CompilerPlugin बनाइए, जो पैकेज के सभी मैक्रो की सूची रखता हो।

import SwiftCompilerPlugin

@main
struct MyPlugin: CompilerPlugin {
  let providingMacros: [Macro.Type] = [
    StringifyMacro.self
  ]
}

मैक्रो का उपयोग करना

मैक्रो लाइब्रेरी आयात कीजिए और उसे #stringify के साथ कॉल कीजिए।

import MyMacros
let (value, source) = #stringify(2 + 3)
print(value)   // 5
print(source)  // "2 + 3"

ExprSyntax बनाना

रिटर्न मान ExprSyntax पर स्ट्रिंग इंटरपोलेशन का उपयोग करके बनाए जाते हैं, जिससे SwiftSyntax की प्रकार-सुरक्षा का लाभ मिलता है।

// The expansion returns a tuple literal
return "((\(arg)), \(literal: arg.description))"

मैक्रो तर्कों तक पहुँचना

तर्कों तक node.arguments के माध्यम से पहुँचा जाता है। यह नामांकित अभिव्यक्तियों की एक सूची है।

let args = node.arguments
for arg in args {
  print(arg.label?.text ?? "_", arg.expression)
}

निदान संदेश उत्पन्न करना

विस्तार संदर्भ का उपयोग करके मैक्रो से कंपाइलर की चेतावनियाँ या त्रुटियाँ उत्पन्न कीजिए।

context.diagnose(Diagnostic(
  node: node,
  message: MyDiagnostic.missingArgument
))

SwiftSyntax सिंटैक्स नोड

SwiftSyntax भाषा के प्रत्येक निर्माण को एक टाइपयुक्त सिंटैक्स नोड के रूप में दर्शाता है, जिसकी जाँच और रचना की जा सकती है।

import SwiftSyntax
let expr: ExprSyntax = "1 + 2"
print(type(of: expr)) // BinaryOperatorExprSyntax

मैक्रो स्वच्छता

Swift मैक्रो डिफ़ॉल्ट रूप से स्वच्छ होते हैं: उत्पन्न नाम कॉल करने वाले दायरे के नामों से नहीं टकराएँगे।

// Macro-generated variables get unique names internally
// preventing accidental shadowing in user code

Xcode में विस्तार करना

Xcode में किसी भी मैक्रो कॉल पर दायाँ-क्लिक कीजिए और उत्पन्न स्रोत की जाँच करने के लिए मैक्रो विस्तारित करें चुनिए।

#stringify(40 + 2)
// Xcode expands to: (40 + 2, "40 + 2")

त्वरित जाँच

अभिव्यक्ति मैक्रो के कार्यान्वयन को किस प्रोटोकॉल के अनुरूप होना चाहिए?

पाठ का पुनरावलोकन

स्वतंत्र अभिव्यक्ति मैक्रो लिखने के लिए उसे @freestanding(expression) के साथ घोषित कीजिए, .macro लक्ष्य में ExpressionMacro का कार्यान्वयन कीजिए, CompilerPlugin के माध्यम से पंजीकृत कीजिए और #macroName() के साथ कॉल कीजिए।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Swift सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
122
पाठ
409

अक्सर पूछे जाने वाले प्रश्न

क्या “स्वतंत्र एक्सप्रेशन मैक्रो लिखना” पाठ निःशुल्क है?

हाँ — Swift Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “स्वतंत्र एक्सप्रेशन मैक्रो लिखना” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“स्वतंत्र एक्सप्रेशन मैक्रो लिखना” में मैं क्या सीखूँगा?

SwiftSyntax और MacroExpansion से एक सरल #stringify मैक्रो लागू करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Swift Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Swift Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Swift Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“स्वतंत्र एक्सप्रेशन मैक्रो लिखना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Swift Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Swift Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. मैक्रो भूमिकाएँ: स्वतंत्र बनाम संलग्न
  2. स्वतंत्र एक्सप्रेशन मैक्रो लिखना
  3. बॉयलरप्लेट घटाने के लिए संलग्न सदस्य मैक्रो
  4. मैक्रो का परीक्षण और डीबगिंग
← Swift Academy पर वापस जाएँ