config.json


A config.json fájl a kurzus konfigurációját írja le. Olyan fontos információkat tartalmaz, mint a kurzus feladatai és fogalmai.

Metaadatok

A következő legfelső szintű tulajdonságok általános kurzus-metaadatokat tartalmaznak:

  • language: a kurzus nyelve (pl. "C#"). A hossza legfeljebb 255 lehet. (kötelező)
  • slug: a kurzus nyelve kisbetűs, kebab-case formátumú stringként (pl. "csharp"). A hossza legfeljebb 255 lehet. (kötelező)
  • active: egy boolean érték, amely azt jelzi, hogy a kurzus aktív-e (azaz a tanulók csatlakozhatnak a kurzushoz a weboldalon) (kötelező)
  • blurb: a nyelv rövid leírása. A hossza legfeljebb 400 lehet. (kötelező)
  • version: a config.json fájl verziója (jelenleg 3-ra rögzítve) (kötelező)
  • online_editor: az online szerkesztőhöz használt beállításokat leíró objektum: (kötelező)
    • indent_style: vagy "space", vagy "tab" (kötelező)
    • indent_size: a behúzás mérete egész számként (pl. 4) (kötelező)
    • highlightjs_language: a nyelvazonosító a Highlight.js-hez (lásd az azonosítók teljes listáját) (opcionális)
  • status: egy objektum, amely leírja, hogy mely v3-s funkciókat kell engedélyezni: (kötelező)
    • concept_exercises: egy boolean érték, amely azt jelzi, hogy készültek-e tanulófeladatok (kötelező). Ha az értéke true, az Exercism weboldalának felülete jelzi, hogy a kurzushoz érhetők el tanulófeladatok.
    • test_runner: egy boolean érték, amely azt jelzi, hogy implementáltak-e egy tesztfuttatót (kötelező). Ha az értéke true, a beküldött megoldásokat átengedjük a tesztelési infrastruktúránkon, és az eredményeket megjelenítjük a weboldalon. A weboldal emellett lehetővé teszi a tanulóknak, hogy tesztfuttatást indítsanak az online szerkesztőből.
    • representer: egy boolean érték, amely azt jelzi, hogy implementáltak-e egy representert (kötelező)
    • analyzer: egy boolean érték, amely azt jelzi, hogy implementáltak-e egy elemzőt (kötelező)
  • files: A feladathoz használt fájlok helyének mintázatai, a feladat könyvtárához viszonyítva. (opcionális)
    • solution: a stub implementációs fájl(ok) mintázata (opcionális)
    • test: a tesztfájl(ok) mintázata (opcionális)
    • example: a példa-implementációs fájl(ok) mintázata (opcionális)
    • exemplar: az exemplar-implementációs fájl(ok) mintázata (opcionális)
    • editor: további írásvédett szerkesztőfájl-mintázatok (opcionális)
  • test_runner: a kurzus tesztfuttatóját leíró objektum (ha van): (kötelező, ha a status.test_runner értéke true)
    • average_run_time: egy egész number érték, amely megadja, hogy a tesztfuttató átlagosan hány másodperc alatt fut le (pl. 4) (kötelező, ha a status.test_runner értéke true)
  • approaches: objektum a kurzus megközelítéseire vonatkozó metaadatokkal: (kötelező, ha a kurzusnak van legalább egy megközelítése)
    • snippet_extension: a kódrészletfájl kiterjesztéséhez használt string érték (pl. rb) (kötelező, ha a kurzusnak van legalább egy megközelítése)

Fájlok

Ez a kulcs a kurzusszintű fájlhelyek megadására szolgál. Ahelyett, hogy a karbantartóknak manuálisan kellene beállítaniuk a files kulcsot a feladatok config.json fájljaiban, a configlet ezekkel a kurzusszintű mintázatokkal automatikusan feltöltheti azt.

A files objektumban meghatározott fájlmintázatok a következő helyőrzőket támogatják:

  • %{kebab_slug}: a kebab-case formátumú feladat-slug (pl. bit-manipulation)
  • %{snake_slug}: a snake_case formátumú feladat-slug (pl. bit_manipulation)
  • %{camel_slug}: a camelCase formátumú feladat-slug (pl. bitManipulation)
  • %{pascal_slug}: a PascalCase formátumú feladat-slug (pl. BitManipulation)

A configlet később támogatni fogja ezeknek a mintázatoknak a használatát, hogy feltöltse a files kulcsot a feladat .meta/config.json fájljában.

Példa

{
  "language": "C#",
  "slug": "csharp",
  "active": true,
  "status": {
    "concept_exercises": true,
    "test_runner": true,
    "representer": false,
    "analyzer": false
  },
  "blurb": "C# is a modern, object-oriented language with lots of great features, such as type-inference and async/await. The tooling is excellent, and there is extensive, well-written documentation.",
  "version": 3,
  "online_editor": {
    "indent_style": "space",
    "indent_size": 4,
    "highlightjs_language": "csharp"
  },
  "test_runner": {
    "average_run_time": 2
  },
  "files": {
    "solution": [
      "%{pascal_slug}.cs"
    ],
    "test": [
      "%{pascal_slug}Tests.cs"
    ],
    "example": [
      ".meta/Example.cs"
    ],
    "exemplar": [
      ".meta/Exemplar.cs"
    ]
  }
}

Feladatok

A legfelső szintű exercises kulcs egy objektum, amelynek három lehetséges kulcsa van:

  • concept: egy tömb, amely felsorolja a kurzus tanulófeladatait
  • practice: egy tömb, amely felsorolja a kurzus gyakorlófeladatait
  • foregone: egy tömb, amely azon feladatok slugjait sorolja fel, amelyeket a kurzus nem kíván implementálni

Tanulófeladatok

Minden tanulófeladat egy bejegyzés az exercises.concept tömbben. A feladatok a weboldalon ugyanabban a sorrendben jelennek meg, ahogy ebben a fájlban szerepelnek, és ennek meg kell egyeznie azzal a tipikus sorrenddel, ahogy meg kell oldani őket. Egy tanulófeladat a következő mezőkből áll:

  • uuid: egy V4 UUID, amely egyedileg azonosítja a feladatot. Az UUID-nak egyedinek kell lennie a kurzusan belül és az összes kurzus között is, és soha nem változhat
  • slug: a feladat slugja, amely kisbetűs, kebab-case formátumú string. A slugnak egyedinek kell lennie a kurzusan belüli összes tanuló- és gyakorlófeladat slugja között. A hossza legfeljebb 255 lehet.
  • name: a feladat neve. A hossza legfeljebb 255 lehet.
  • concepts: azon fogalom-slugok tömbje, amelyeket ez a tanulófeladat tanít
  • prerequisites: azon fogalom-slugok tömbje, amelyeket fel kell oldani, mielőtt a tanuló elkezdheti ezt a feladatot
  • status (opcionális): a feladat állapota, amely a következők egyike: "wip", "beta" "active" vagy "deprecated"; ha nincs megadva, az alapértéke "active"
    • wip: Egy folyamatban lévő feladat, amely még nem kész a nyilvános használatra. Az ilyen jelölésű feladatokat nem jelenítjük meg a tanulóknak a felületen, és nem használjuk feloldási logikához. A karbantartók számára megjelenhetnek.
    • beta: Új, aktív feladatokat jelöl, amelyekről visszajelzést szeretnénk kapni. Ezeknél a feladatoknál beta címkét jelenítünk meg az oldalon, egy „Kérünk, adj visszajelzést!” felszólítással.
    • active: Az aktív feladatok szokásos állapota
    • deprecated: Olyan feladatok, amelyeket már nem jelenítünk meg azoknak a tanulóknak, akik még nem kezdték el őket (ebben a szakaszban nem használhatók). További információért lásd az elavult feladatokról szóló oldalt.

Példa

{
  "exercises": {
    "concept": [
      {
        "slug": "cars-assemble",
        "name": "Cars, Assemble!",
        "uuid": "93fbc7cf-3a7e-4450-ad22-e30129c36bb9",
        "concepts": [
          "if-statements",
          "numbers"
        ],
        "prerequisites": [
          "basics"
        ]
      },
      ...
    ]
  }
}

Példa folyamatban lévő feladatra

{
  "exercises": {
    "concept": [
      {
        "slug": "cars-assemble",
        "name": "Cars, Assemble!",
        "uuid": "93fbc7cf-3a7e-4450-ad22-e30129c36bb9",
        "concepts": [
          "if-statements",
          "numbers"
        ],
        "prerequisites": [
          "basics"
        ],
        "status": "wip"
      },
      ...
    ]
  }
}

Gyakorlófeladatok

Minden gyakorlófeladat egy bejegyzés az exercises.practice tömbben. Egy gyakorlófeladat a következő mezőkből áll:

  • uuid: egy V4 UUID, amely egyedileg azonosítja a feladatot. Az UUID-nak egyedinek kell lennie a kurzusan belül és az összes kurzus között is, és soha nem változhat
  • slug: a feladat slugja, amely kisbetűs, kebab-case formátumú string. A slugnak egyedinek kell lennie a kurzusan belüli összes tanuló- és gyakorlófeladat slugja között. A hossza legfeljebb 255 lehet.
  • name: a feladat neve. A hossza legfeljebb 255 lehet.
  • practices: azon fogalom-slugok tömbje, amelyek gyakorlásában a feladat segít a tanulóknak
  • prerequisites: azon fogalom-slugok tömbje, amelyeket fel kell oldani, mielőtt a tanuló elkezdheti a feladatot
  • difficulty: egy szám, amely a feladat nehézségét jelzi. A számnak az 1 (legkönnyebb) és 10 (legnehezebb) közötti tartományban kell lennie. A weboldal a nehézséget a következőképpen értelmezi:
    • 1,2,3: könnyű
    • 4,5,6,7: közepes
    • 8,9,10: nehéz
  • status (opcionális): a feladat állapota, amely a következők egyike: "wip", "beta", "active" vagy "deprecated"; ha nincs megadva, az alapértéke "active"
    • wip: Egy folyamatban lévő feladat, amely még nem kész a nyilvános használatra. Az ilyen jelölésű feladatokat nem jelenítjük meg a tanulóknak a felületen, és nem használjuk feloldási logikához. A karbantartók számára megjelenhetnek.
    • beta: Új, aktív feladatokat jelöl, amelyekről visszajelzést szeretnénk kapni. Ezeknél a feladatoknál beta címkét jelenítünk meg az oldalon, egy „Kérünk, adj visszajelzést!” felszólítással
    • active: Az aktív feladatok szokásos állapota
    • deprecated: Olyan feladatok, amelyeket már nem jelenítünk meg azoknak a tanulóknak, akik még nem kezdték el őket (ebben a szakaszban nem használhatók).

A gyakorlófeladatok „Ajánlott sorrendje” a weboldalon megfelel a feladatok practice tömbben szereplő sorrendjének.

Példa

{
  "exercises": {
    "practice": [
      {
        "slug": "leap",
        "name": "Leap",
        "uuid": "8ba15933-29a2-49b1-a9ce-70474bad3007",
        "practices": [
          "if-statements",
          "numbers",
          "operator-precedence"
        ],
        "prerequisites": [
          "if-statements",
          "numbers"
        ],
        "difficulty": 1
      },
      ...
    ]
  }
}

Példa beta állapotú feladatra

{
  "exercises": {
    "practice": [
      {
        "slug": "leap",
        "name": "Leap",
        "uuid": "8ba15933-29a2-49b1-a9ce-70474bad3007",
        "practices": [
          "if-statements",
          "numbers",
          "operator-precedence"
        ],
        "prerequisites": [
          "if-statements",
          "numbers"
        ],
        "difficulty": 1,
        "status": "beta"
      },
      ...
    ]
  }
}

Mellőzött feladatok

Ha egy kurzus tudja, hogy nem kíván implementálni egy feladatot, amely a Problem Specifications repóban van definiálva, akkor a feladat slugját hozzáadhatja az exercises.foregone kulcshoz. A configlet figyelmen kívül hagyja a mellőzött feladatokat, amikor kiírja a kurzus nem implementált feladatait.

Okok, amiért egy kurzus esetleg nem kíván implementálni egy feladatot:

  • A feladatot a nyelv ésszerűen nem tudja implementálni. Például a lens-person feladathoz az kell, hogy a nyelv támogassa a lencséket.
  • A feladat témája nem illik a nyelvhez. Például bizonyos magas szintű nyelveknél egy alacsony szintű bitmanipulációs feladatnak nem sok értelme lenne.

Példa

{
  "exercises": {
    "foregone": [
      "lens-person"
    ]
  }
}

Fogalmak

Minden fogalom egy bejegyzés a legfelső szintű concepts tömbben. Egy fogalom a következő mezőkből áll:

  • uuid: egy V4 UUID, amely egyedileg azonosítja a fogalmat. Az UUID-nak egyedinek kell lennie a kurzusan belül és az összes kurzus között is, és soha nem változhat
  • slug: a fogalom slugja, amely kisbetűs, kebab-case formátumú string. A slugnak egyedinek kell lennie a kurzus összes fogalma között. A hossza legfeljebb 255 lehet.
  • name: a fogalom neve. A hossza legfeljebb 255 lehet.
  • tags: meghatározza azokat a feltételeket, amelyek teljesülése esetén egy beküldés egy megközelítéshez kapcsolódik. (opcionális)
    • all: olyan címkék tömbje, amelyeknek mind szerepelniük kell egy beküldésen (opcionális, kivéve, ha az any egyetlen elemet sem tartalmaz)
    • any: olyan címkék tömbje, amelyek közül legalább egynek szerepelnie kell egy beküldésen (opcionális, kivéve, ha az all egyetlen elemet sem tartalmaz)
    • not: egyik címkének sem szabad szerepelnie egy beküldésen (opcionális)

Példa

{
  "concepts": [
    {
      "uuid": "b9a421b2-c5ff-4213-bd6d-b886da31ea0d",
      "slug": "numbers",
      "name": "Numbers",
      "tags": {
        "all": [
          "concept:number"
        ]
      }
    }
  ]
}

Fő jellemzők

A nyelv fő jellemzői tömören leírják, melyek a nyelv legfontosabb jellemzői. Céljuk, hogy a nyelv érdekesebb jellemzőit népszerűsítsék a leendő tanulók körében. A címeknél törekedj a lehető legkevesebb szakzsargon használatára, szem előtt tartva, hogy a tanulók a nyelv megtanulása előtt még nem biztos, hogy tisztában vannak azzal, mit jelentenek a nyelvspecifikus szakkifejezések.

A fő jellemzőket a legfelső szintű key_features mező adja meg, amely objektumok tömbjeként van definiálva a következő mezőkkel:

  • title: tömör fejléc a fő jellemzőhöz. A hossza legfeljebb 25 lehet. A Markdown nem támogatott.
  • content: a fő jellemző leírása. A hossza legfeljebb 100 lehet. A Markdown nem támogatott.
  • icon: a jellemzőhöz megjelenítendő ikon. Olyan ikont választhatsz, amelyet megfelelőnek tartasz, függetlenül annak nevétől. A következő ikonok használhatók:
    • community
    • concurrency
    • cross-platform
    • documentation
    • dynamically-typed
    • easy
    • embeddable
    • evolving
    • expressive
    • extensible
    • fast
    • fun
    • functional
    • garbage-collected
    • general-purpose
    • homoiconic
    • immutable
    • interactive
    • interop
    • multi-paradigm
    • portable
    • powerful
    • productive
    • safe
    • scientific
    • small
    • stable
    • statically-typed
    • tooling
    • web
    • widely-used

Ezeknek az ikonoknak a vizuális megjelenését a fő jellemzők ikonjai szakaszban nézheted meg.

Pontosan 6 fő jellemzőt kell megadni.

Példa

{
  "key_features": [
    {
      "title": "Fault-tolerant",
      "content": "Elixir runs on the Erlang VM, known for running low-latency, distributed and fault-tolerant systems.",
      "icon": "safe"
    },
    ...
  ],
}

Címkék

A kurzusok címkékkel láthatók el, ami lehetővé teszi a kurzusok keresését egy adott címkekombináció alapján.

A kurzusnak a címkéit a nyelv általános használata alapján kell kiválasztania. Képzeld el például, hogy egy tanuló ezen gondolkodik: „Szeretnék gépi tanulással foglalkozni, melyik nyelvet válasszam?”, vagy: „Szeretnék funkcionális programozást tanulni, melyik nyelvet válasszam?”. Ha a te nyelved jó jelölt lenne, add neki azt a címkét. Ha a nyelved támogat néhány funkcionális ötletet, de azokat ritkán használják, vagy néhányan gépi tanulást végeznek vele, de ez ritka, akkor ne alkalmazd ezeket a címkéket.

A címkéket a legfelső szintű tags mező adja meg, amely stringek tömbjeként van definiálva. A következő címkék használhatók (kategóriák szerint csoportosítva):

Paradigmák

  • paradigm/array: a nyelv tömbprogramozási nyelv
  • paradigm/declarative: a nyelv támogatja a deklaratív programozási stílust
  • paradigm/functional: a nyelv támogatja a funkcionális programozási stílust
  • paradigm/imperative: a nyelv támogatja az imperatív programozási stílust
  • paradigm/logic: a nyelv támogatja a logikaalapú programozási stílust
  • paradigm/object_oriented: a nyelv támogatja az objektumorientált programozási stílust
  • paradigm/procedural: a nyelv támogatja a procedurális programozási stílust
  • paradigm/stack-oriented: a nyelv támogatja a veremorientált programozási stílust

Típusosság

  • typing/static: a nyelv statikus típusozást használ
  • typing/gradual: a nyelv fokozatos típusozást használ
  • typing/dynamic: a nyelv dinamikus típusozást használ
  • typing/strong: a nyelv erős típusozást használ
  • typing/weak: a nyelv gyenge típusozást használ

Végrehajtási mód

  • execution_mode/compiled: a kód a végrehajtás előtt először lefordításra kerül
  • execution_mode/interpreted: a kód közvetlenül értelmezésre kerül

Platform

  • platform/windows: Windows rendszeren fut
  • platform/mac: Macen fut
  • platform/linux: Linuxon fut
  • platform/ios: iOS-en fut
  • platform/android: Androidon fut
  • platform/web: böngészőben fut

Futtatókörnyezet

  • runtime/standalone_executable: önálló futtatható programként fut
  • runtime/language_specific: nyelvspecifikus futtatókörnyezetben fut
  • runtime/clr: Common Language Runtime (.NET) környezetben fut
  • runtime/jvm: JVM-en (Java) fut
  • runtime/beam: BEAM-en (Erlang) fut
  • runtime/wasmtime: Wasmtime-on (WebAssembly) fut

Felhasználási területek

  • used_for/artificial_intelligence: mesterséges intelligencia
  • used_for/backends: backendek
  • used_for/cross_platform_development: platformok közötti fejlesztés
  • used_for/embedded_systems: beágyazott rendszerek
  • used_for/financial_systems: pénzügyi rendszerek
  • used_for/frontends: frontendek
  • used_for/games: játékok
  • used_for/guis: grafikus felhasználói felületek
  • used_for/mobile: mobil
  • used_for/robotics: robotika
  • used_for/scientific_calculations: tudományos számítások
  • used_for/scripts: szkriptek
  • used_for/web_development: webfejlesztés

Ne feledd, hogy teljesen rendben van, ha egyetlen kategóriából több címkét is megadsz.

Példa

{
  "tags": [
    "paradigm/declarative",
    "paradigm/functional",
    "paradigm/object_oriented",
    "platform/linux",
    "platform/windows",
    "runtime/jvm"
  ]
}

Példa

Így nézhet ki egy érvényes config.json fájl:

{
  "language": "C#",
  "slug": "csharp",
  "active": true,
  "status": {
    "concept_exercises": true,
    "test_runner": true,
    "representer": false,
    "analyzer": false
  },
  "blurb": "C# is a modern, object-oriented language with lots of great features, such as type-inference and async/await. The tooling is excellent, and there is extensive, well-written documentation.",
  "version": 3,
  "online_editor": {
    "indent_style": "space",
    "indent_size": 4,
    "highlightjs_language": "csharp"
  },
  "test_runner": {
    "average_run_time": 2
  },
  "files": {
    "solution": [
      "%{pascal_slug}.cs"
    ],
    "test": [
      "%{pascal_slug}Tests.cs"
    ],
    "example": [
      ".meta/Example.cs"
    ],
    "exemplar": [
      ".meta/Exemplar.cs"
    ]
  },
  "exercises": {
    "concept": [
      {
        "slug": "lucians-luscious-lasagna",
        "name": "Lucian's Luscious Lasagna",
        "uuid": "7d358894-4fbd-4c91-b49f-d68f1c5aa6bc",
        "concepts": [
          "basics"
        ],
        "prerequisites": []
      },
      {
        "slug": "cars-assemble",
        "name": "Cars, Assemble!",
        "uuid": "93fbc7cf-3a7e-4450-ad22-e30129c36bb9",
        "concepts": [
          "if-statements",
          "numbers"
        ],
        "prerequisites": [
          "basics"
        ],
        "status": "wip"
      }
    ],
    "practice": [
      {
        "slug": "hello-world",
        "name": "Hello, World!",
        "uuid": "6c88f46b-5acb-4fae-a6ec-b48ae3f8168f",
        "practices": [
          "strings"
        ],
        "prerequisites": [
          "basics"
        ],
        "difficulty": 1
      },
      {
        "slug": "leap",
        "name": "Leap",
        "uuid": "8ba15933-29a2-49b1-a9ce-70474bad3007",
        "practices": [
          "if-statements",
          "numbers",
          "operator-precedence"
        ],
        "prerequisites": [
          "if-statements",
          "numbers"
        ],
        "difficulty": 2,
        "status": "beta"
      }
    ]
  },
  "concepts": [
    {
      "uuid": "2eb4a463-355f-46ef-ac55-a75ec5afdf86",
      "slug": "basics",
      "name": "Basics"
    },
    {
      "uuid": "4466e33e-dcd2-4b1f-9d9d-2c4315bf5188",
      "slug": "if-statements",
      "name": "If Statements"
    },
    {
      "uuid": "b9a421b2-c5ff-4213-bd6d-b886da31ea0d",
      "slug": "numbers",
      "name": "Numbers"
    },
    {
      "uuid": "7a86561d-173b-45c0-a53c-1ffd7b9ff259",
      "slug": "strings",
      "name": "Strings"
    }
  ],
  "key_features": [
    {
      "title": "Modern",
      "content": "C# is a modern, fast-evolving language.",
      "icon": "expressive"
    },
    {
      "title": "Cross-platform",
      "content": "C# runs on almost any platform and chipset.",
      "icon": "cross-platform"
    },
    {
      "title": "Multi-paradigm",
      "content": "C# is primarily an object-oriented language, but also has lots of functional features.",
      "icon": "multi-paradigm"
    },
    {
      "title": "General purpose",
      "content": "C# can be used for a wide variety of workloads, like websites, console applications, and even games.",
      "icon": "general-purpose"
    },
    {
      "title": "Tooling",
      "content": "C# has excellent tooling, with linting and advanced refactoring options built-in.",
      "icon": "tooling"
    },
    {
      "title": "Documentation",
      "content": "Documentation is excellent and exhaustive, making it easy to get started with C#.",
      "icon": "documentation"
    }
  ],
  "tags": [
    "paradigm/declarative",
    "paradigm/functional",
    "paradigm/object_oriented",
    "platform/linux",
    "platform/windows",
    "runtime/jvm"
  ]
}