Swift Academy · Ders

Bağımsız İfade Makrosu Yazma

SwiftSyntax ve MacroExpansion kullanarak basit bir #stringify makrosu uygulayın.

2. ders / 413 adım

Bağımsız İfade Makrosu Yazma, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.

Proje Kurulumu

macro'lar, SwiftSyntax kullanan, .macro türündeki ayrı bir Swift paket hedefinde bulunur.

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

macro Bildirimi

İstemcilerin çağırabilmesi için macro imzasını bir kitaplık hedefinde bildirin.

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

macro Türünü Uygulama

macro'yu ExpressionMacro protokolüne uyum sağlayarak ve bir ExprSyntax döndürerek uygulayın.

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))"
  }
}

Eklentiyi Kaydetme

Paketteki tüm macro'ları listeleyen bir CompilerPlugin oluşturun.

import SwiftCompilerPlugin

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

macro Kullanımı

macro kitaplığını içe aktarın ve onu #stringify ile çağırın.

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

ExprSyntax Oluşturma

Dönüş değerleri, ExprSyntax üzerinde dize enterpolasyonu kullanılarak oluşturulur; bu işlem SwiftSyntax'ın tür güvenliğinden yararlanır.

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

macro Argümanlarına Erişme

Argümanlara, etiketli ifadelerden oluşan bir liste olan node.arguments üzerinden erişilir.

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

Tanılama İletileri Oluşturma

macro'lardan derleyici uyarıları veya hataları yayınlamak için genişletme bağlamını kullanın.

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

SwiftSyntax Sözdizimi Düğümleri

SwiftSyntax, her dil yapısını inceleyebileceğiniz ve oluşturabileceğiniz, türü belirli bir sözdizimi düğümü olarak temsil eder.

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

macro Hijyeni

Swift macro'ları varsayılan olarak hijyeniktir: üretilen adlar, çağıran kapsamdaki adlarla çakışmaz.

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

Xcode'da Genişletme

Üretilen kaynağı incelemek için Xcode'da herhangi bir macro çağrısına sağ tıklayın ve Makroyu Genişlet seçeneğini belirleyin.

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

Kısa Kontrol

Bir ifade macro'su uygulaması hangi protokole uyum sağlamalıdır?

Ders Özeti

Bağımsız bir ifade macro'su yazmak için: macro'yu @freestanding(expression) ile bildirin, bir .macro hedefinde ExpressionMacro uygulayın, CompilerPlugin aracılığıyla kaydedin ve #macroName() ile çağırın.

Başlamak ücretsiz

Yapay zeka eğitmeniyle Swift öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
122
Dersler
409

Sıkça Sorulan Sorular

“Bağımsız İfade Makrosu Yazma” dersi ücretsiz mi?

Evet — “Bağımsız İfade Makrosu Yazma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.

“Bağımsız İfade Makrosu Yazma” dersinde ne öğreneceğim?

SwiftSyntax ve MacroExpansion kullanarak basit bir #stringify makrosu uygulayın. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Swift Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Bağımsız İfade Makrosu Yazma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Makro Rolleri: Bağımsız ve Ekli
  2. Bağımsız İfade Makrosu Yazma
  3. Kalıp Kodu Azaltmak için Ekli Üye Makroları
  4. Makroları Sınama ve Hatalarını Ayıklama
← Swift Academy Sayfasına Dön