[{"data":1,"prerenderedAt":1866},["ShallowReactive",2],{"manifest":3,"hreflang-alternates":1643,"doc-ja-volang\u002Fstdlib":1649},{"site":4,"branding":6,"contact":8,"organization_schema":10,"languages":67,"website":81,"docs":286,"blog":1528},{"title":5},"Voldeno",{"logo":7,"company_name":5},"\u002Fimages\u002Flogo\u002Flogo_310.png",{"email":9},"contact@voldeno.com",{"schema_name":5,"legal_name":11,"founding_date":12,"tax_id":13,"identifiers":14,"address":21,"primary_email":9,"knows_about":26,"contact_points":50,"contact_point_available_languages":62},"Voldeno sp. z o.o.","2024","PL7252346262",[15,18],{"name":16,"value":17},"KRS","0001123648",{"name":19,"value":20},"REGON","52946949200000",{"street_address":22,"address_locality":23,"postal_code":24,"address_country":25},"Ogrodowa 8, Lobby B, 3p.","Łódź","91-062","PL",{"en":27,"ja":34,"de":40,"pl":45},[28,29,30,31,32,33],"Smart Home","Smart Home Systems","Smart Home Automation","Building Automation","IoT","Home Automation System",[35,36,37,38,32,39],"スマートホーム","スマートホームシステム","スマートホーム自動化","ビルディングオートメーション","ホームオートメーションシステム",[28,41,42,43,32,44],"Smart-Home-Systeme","Smart-Home-Automatisierung","Gebäudeautomation","Hausautomationssystem",[46,28,47,48,32,49],"Inteligentny dom","System Smart Home","Automatyka budynkowa","System automatyki domowej",[51,54,57,60],{"email":52,"contact_type":53},"support@voldeno.com","technical support",{"email":55,"contact_type":56},"sales@voldeno.com","sales",{"email":58,"contact_type":59},"partners@voldeno.com","partnerships",{"email":9,"contact_type":61},"customer service",[63,64,65,66],"Polish","English","German","Japanese",[68,72,75,78],{"code":69,"name":70,"default":71},"pl","Polski",true,{"code":73,"name":64,"default":74},"en",false,{"code":76,"name":77,"default":74},"de","Deutsch",{"code":79,"name":80,"default":74},"ja","日本語",{"enabled":71,"navigation":82,"path_keys":247,"section_index_slugs":275},{"ja":83,"pl":136,"en":177,"de":209},[84,90,96,101,110,115,120,131],{"title":85,"slug":86,"path":87,"order":88,"template":89},"Voldeno: Smart Home, ビルディングオートメーション","index","ja\u002Findex",0,"home",{"title":91,"slug":92,"path":93,"order":94,"template":95},"ご家庭向け","your-home","ja\u002Fyour-home",1,"homeowners",{"title":97,"slug":98,"path":99,"order":100,"template":98},"プロ向け","professionals","ja\u002Fprofessionals",2,{"title":102,"slug":103,"path":104,"order":105,"children":106},"製品","products","ja\u002Fproducts",3,[107],{"title":108,"slug":86,"path":109,"order":94,"template":103},"Voldeno Smart Home 製品","ja\u002Fproducts\u002Findex",{"title":111,"slug":112,"path":113,"order":114,"template":112},"お問い合わせ","contact","ja\u002Fcontact",4,{"title":116,"slug":117,"path":118,"order":119,"template":117},"会社概要","about","ja\u002Fabout",5,{"title":121,"slug":122,"path":123,"order":124,"children":125},"法的情報","legal","ja\u002Flegal",6,[126],{"title":127,"slug":128,"path":129,"order":94,"template":130},"プライバシーポリシー","privacy-policy","ja\u002Flegal\u002Fprivacy-policy","page",{"title":132,"slug":133,"path":134,"order":135},"Projects","projects","ja\u002Fprojects",999,[137,140,144,148,156,160,164,173],{"title":138,"slug":86,"path":139,"order":88,"template":89},"Smart Home, Automatyka budynkowa - Voldeno","pl\u002Findex",{"title":141,"slug":142,"path":143,"order":94,"template":95},"Twój Dom","twoj-dom","pl\u002Ftwoj-dom",{"title":145,"slug":146,"path":147,"order":100,"template":98},"Dla Profesjonalistów","dla-profesjonalistow","pl\u002Fdla-profesjonalistow",{"title":149,"slug":150,"path":151,"order":105,"children":152},"Produkty","produkty","pl\u002Fprodukty",[153],{"title":154,"slug":86,"path":155,"order":94,"template":103},"Inteligentne produkty​ Smart Home Voldeno","pl\u002Fprodukty\u002Findex",{"title":157,"slug":158,"path":159,"order":114,"template":112},"Kontakt","kontakt","pl\u002Fkontakt",{"title":161,"slug":162,"path":163,"order":119,"template":117},"O nas","o-nas","pl\u002Fo-nas",{"title":165,"slug":166,"path":167,"order":124,"children":168},"Prawne","prawne","pl\u002Fprawne",[169],{"title":170,"slug":171,"path":172,"order":94,"template":130},"Polityka prywatności","polityka-prywatnosci","pl\u002Fprawne\u002Fpolityka-prywatnosci",{"title":174,"slug":175,"path":176,"order":135},"Realizacje","realizacje","pl\u002Frealizacje",[178,181,184,187,194,197,200,207],{"title":179,"slug":86,"path":180,"order":88,"template":89},"Voldeno: Smart Home, Building Automation","en\u002Findex",{"title":182,"slug":92,"path":183,"order":94,"template":95},"Your Home","en\u002Fyour-home",{"title":185,"slug":98,"path":186,"order":100,"template":98},"For Professionals","en\u002Fprofessionals",{"title":188,"slug":103,"path":189,"order":105,"children":190},"Products","en\u002Fproducts",[191],{"title":192,"slug":86,"path":193,"order":94,"template":103},"Smart Home Products​ from Voldeno","en\u002Fproducts\u002Findex",{"title":195,"slug":112,"path":196,"order":114,"template":112},"Contact","en\u002Fcontact",{"title":198,"slug":117,"path":199,"order":119,"template":117},"About Us","en\u002Fabout",{"title":201,"slug":122,"path":202,"order":124,"children":203},"Legal","en\u002Flegal",[204],{"title":205,"slug":128,"path":206,"order":94,"template":130},"Privacy Policy","en\u002Flegal\u002Fprivacy-policy",{"title":132,"slug":133,"path":208,"order":135},"en\u002Fprojects",[210,213,217,221,229,231,235,243],{"title":211,"slug":86,"path":212,"order":88,"template":89},"Voldeno: Smart Home, Gebäudeautomation","de\u002Findex",{"title":214,"slug":215,"path":216,"order":94,"template":95},"Ihr Zuhause","ihr-zuhause","de\u002Fihr-zuhause",{"title":218,"slug":219,"path":220,"order":100,"template":98},"Für Fachbetriebe","fuer-fachbetriebe","de\u002Ffuer-fachbetriebe",{"title":222,"slug":223,"path":224,"order":105,"children":225},"Produkte","produkte","de\u002Fprodukte",[226],{"title":227,"slug":86,"path":228,"order":94,"template":103},"Smart-Home-Produkte​ von Voldeno","de\u002Fprodukte\u002Findex",{"title":157,"slug":158,"path":230,"order":114,"template":112},"de\u002Fkontakt",{"title":232,"slug":233,"path":234,"order":119,"template":117},"Über uns","ueber-uns","de\u002Fueber-uns",{"title":236,"slug":237,"path":238,"order":124,"children":239},"Rechtliches","rechtliches","de\u002Frechtliches",[240],{"title":241,"slug":128,"path":242,"order":94,"template":130},"Datenschutzerklärung","de\u002Frechtliches\u002Fprivacy-policy",{"title":244,"slug":245,"path":246,"order":135},"Projekte","projekte","de\u002Fprojekte",{"module_hub":248,"module_1wire":252,"module_relay":256,"module_io":260,"module_analog_input":264,"privacy":268,"downloads":272},{"en":249,"ja":249,"pl":250,"de":251},"products\u002Fhub","produkty\u002Fhub","produkte\u002Fhub",{"ja":253,"en":253,"pl":254,"de":255},"products\u002F1wire","produkty\u002F1wire","produkte\u002F1wire",{"ja":257,"en":257,"de":258,"pl":259},"products\u002Frelay","produkte\u002Frelay","produkty\u002Frelay",{"de":261,"en":262,"ja":262,"pl":263},"produkte\u002Fio","products\u002Fio","produkty\u002Fio",{"pl":265,"de":266,"ja":267,"en":267},"produkty\u002Fanalog-input","produkte\u002Fanalog-input","products\u002Fanalog-input",{"ja":269,"pl":270,"de":271,"en":269},"legal\u002Fprivacy-policy","prawne\u002Fpolityka-prywatnosci","rechtliches\u002Fprivacy-policy",{"pl":273,"en":274,"ja":274,"de":274},"pobieranie","downloads",{"en":276,"ja":279,"pl":280,"de":283},{"products":277,"projects":278},"products\u002Findex","projects\u002Findex",{"projects":278,"products":277},{"realizacje":281,"produkty":282},"realizacje\u002Findex","produkty\u002Findex",{"produkte":284,"projekte":285},"produkte\u002Findex","projekte\u002Findex",{"enabled":71,"navigation":287,"section_redirects":1489},{"en":288,"de":744,"pl":993,"ja":1257},[289,310,319,344,357,679,693,707,729,739],{"title":290,"slug":291,"path":292,"order":94,"children":293},"Getting Started","getting-started","en\u002Fdocs\u002Fgetting-started",[294,298,302,306],{"title":295,"slug":296,"path":297,"order":94},"Core Concepts and Terminology","concepts","en\u002Fdocs\u002Fgetting-started\u002Fconcepts",{"title":299,"slug":300,"path":301,"order":100},"System Overview for Installers","system-overview","en\u002Fdocs\u002Fgetting-started\u002Fsystem-overview",{"title":303,"slug":304,"path":305,"order":105},"How to define logic in Voldeno Studio from scratch","define-logic-in-voldeno-studio","en\u002Fdocs\u002Fgetting-started\u002Fdefine-logic-in-voldeno-studio",{"title":307,"slug":308,"path":309,"order":114},"Volang and VolangVM: why a smart home needs its own automation language","volang-and-volangvm","en\u002Fdocs\u002Fgetting-started\u002Fvolang-and-volangvm",{"title":311,"slug":312,"path":313,"order":100,"children":314},"System Architecture","system-architecture","en\u002Fdocs\u002Fsystem-architecture",[315],{"title":316,"slug":317,"path":318,"order":94},"Security Architecture","security","en\u002Fdocs\u002Fsystem-architecture\u002Fsecurity",{"title":320,"slug":321,"path":322,"order":105,"children":323},"Modules & Peripherals","modules","en\u002Fdocs\u002Fmodules",[324,328,332,336,340],{"title":325,"slug":326,"path":327,"order":94},"Hub Module Wiring","hub-wiring","en\u002Fdocs\u002Fmodules\u002Fhub-wiring",{"title":329,"slug":330,"path":331,"order":100},"I\u002FO Module Wiring","io-wiring","en\u002Fdocs\u002Fmodules\u002Fio-wiring",{"title":333,"slug":334,"path":335,"order":105},"Relay Module Wiring","relay-wiring","en\u002Fdocs\u002Fmodules\u002Frelay-wiring",{"title":337,"slug":338,"path":339,"order":114},"1-Wire Module Wiring","1wire-wiring","en\u002Fdocs\u002Fmodules\u002F1wire-wiring",{"title":341,"slug":342,"path":343,"order":119},"Analog Input Module Wiring","analog-input-wiring","en\u002Fdocs\u002Fmodules\u002Fanalog-input-wiring",{"title":345,"slug":346,"path":347,"order":114,"children":348},"Wiring Guidelines","wiring","en\u002Fdocs\u002Fwiring",[349,353],{"title":350,"slug":351,"path":352,"order":94},"Bus Topology & Wiring","bus-topology","en\u002Fdocs\u002Fwiring\u002Fbus-topology",{"title":354,"slug":355,"path":356,"order":100},"Power Supply Sizing and Distribution","power-supply","en\u002Fdocs\u002Fwiring\u002Fpower-supply",{"title":358,"slug":359,"path":360,"order":119,"children":361},"Logic Blocks","logic-blocks","en\u002Fdocs\u002Flogic-blocks",[362,368,419,664],{"title":363,"slug":364,"path":365,"order":88,"template":366,"translation_key":367},"Overview","overview","en\u002Fdocs\u002Flogic-blocks\u002Foverview","logic-block-index","logic-blocks-overview",{"title":369,"slug":370,"path":371,"order":94,"children":372},"Input","input","en\u002Fdocs\u002Flogic-blocks\u002Finput",[373,379,384,389,394,399,404,409,414],{"title":374,"slug":375,"path":376,"order":88,"template":377,"translation_key":378},"Binary input","binary_input","en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fbinary_input","logic-block","logic-block-binary_input",{"title":380,"slug":381,"path":382,"order":88,"template":377,"translation_key":383},"Boolean constant","boolean_constant","en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fboolean_constant","logic-block-boolean_constant",{"title":385,"slug":386,"path":387,"order":88,"template":377,"translation_key":388},"Numeric constant","numeric_constant","en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fnumeric_constant","logic-block-numeric_constant",{"title":390,"slug":391,"path":392,"order":88,"template":377,"translation_key":393},"Numeric input","numeric_input","en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fnumeric_input","logic-block-numeric_input",{"title":395,"slug":396,"path":397,"order":88,"template":377,"translation_key":398},"Mode monitor","operation_mode_monitor","en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Foperation_mode_monitor","logic-block-operation_mode_monitor",{"title":400,"slug":401,"path":402,"order":88,"template":377,"translation_key":403},"PulseAt","pulse_at","en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fpulse_at","logic-block-pulse_at",{"title":405,"slug":406,"path":407,"order":88,"template":377,"translation_key":408},"Schedule","schedule","en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fschedule","logic-block-schedule",{"title":410,"slug":411,"path":412,"order":88,"template":377,"translation_key":413},"String constant","string_constant","en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fstring_constant","logic-block-string_constant",{"title":415,"slug":416,"path":417,"order":88,"template":377,"translation_key":418},"Switch","switch","en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fswitch","logic-block-switch",{"title":420,"slug":421,"path":422,"order":100,"children":423},"Process","process","en\u002Fdocs\u002Flogic-blocks\u002Fprocess",[424,429,434,439,444,449,454,459,464,469,474,479,484,489,494,499,504,509,514,519,524,529,534,539,544,549,554,559,564,569,574,579,584,589,594,599,604,609,614,619,624,629,634,639,644,649,654,659],{"title":425,"slug":426,"path":427,"order":88,"template":377,"translation_key":428},"Binary limiter","binary_limiter","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fbinary_limiter","logic-block-binary_limiter",{"title":430,"slug":431,"path":432,"order":88,"template":377,"translation_key":433},"Boolean to string","boolean_to_string","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fboolean_to_string","logic-block-boolean_to_string",{"title":435,"slug":436,"path":437,"order":88,"template":377,"translation_key":438},"Climate regulator","climate_regulator","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fclimate_regulator","logic-block-climate_regulator",{"title":440,"slug":441,"path":442,"order":88,"template":377,"translation_key":443},"Climate regulator hub","climate_regulator_hub","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fclimate_regulator_hub","logic-block-climate_regulator_hub",{"title":445,"slug":446,"path":447,"order":88,"template":377,"translation_key":448},"Delay","delay","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fdelay","logic-block-delay",{"title":450,"slug":451,"path":452,"order":88,"template":377,"translation_key":453},"Delayed Pulse","delayed_pulse","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fdelayed_pulse","logic-block-delayed_pulse",{"title":455,"slug":456,"path":457,"order":88,"template":377,"translation_key":458},"Door, window","door_window_monitor","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fdoor_window_monitor","logic-block-door_window_monitor",{"title":460,"slug":461,"path":462,"order":88,"template":377,"translation_key":463},"Edge detector","edge_detector","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fedge_detector","logic-block-edge_detector",{"title":465,"slug":466,"path":467,"order":88,"template":377,"translation_key":468},"Gate","gate","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fgate","logic-block-gate",{"title":470,"slug":471,"path":472,"order":88,"template":377,"translation_key":473},"HTTP Request","http_request","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fhttp_request","logic-block-http_request",{"title":475,"slug":476,"path":477,"order":88,"template":377,"translation_key":478},"Hysteresis","hysteresis","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fhysteresis","logic-block-hysteresis",{"title":480,"slug":481,"path":482,"order":88,"template":377,"translation_key":483},"Irrigation","irrigation","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Firrigation","logic-block-irrigation",{"title":485,"slug":486,"path":487,"order":88,"template":377,"translation_key":488},"JSON Get Boolean","json_get_boolean","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fjson_get_boolean","logic-block-json_get_boolean",{"title":490,"slug":491,"path":492,"order":88,"template":377,"translation_key":493},"JSON Get Number","json_get_number","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fjson_get_number","logic-block-json_get_number",{"title":495,"slug":496,"path":497,"order":88,"template":377,"translation_key":498},"JSON Get String","json_get_string","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fjson_get_string","logic-block-json_get_string",{"title":500,"slug":501,"path":502,"order":88,"template":377,"translation_key":503},"Level to pulse","level_to_pulse","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flevel_to_pulse","logic-block-level_to_pulse",{"title":505,"slug":506,"path":507,"order":88,"template":377,"translation_key":508},"Logic::And","logic_and","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flogic_and","logic-block-logic_and",{"title":510,"slug":511,"path":512,"order":88,"template":377,"translation_key":513},"Logic::Not","logic_not","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flogic_not","logic-block-logic_not",{"title":515,"slug":516,"path":517,"order":88,"template":377,"translation_key":518},"Logic::Or","logic_or","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flogic_or","logic-block-logic_or",{"title":520,"slug":521,"path":522,"order":88,"template":377,"translation_key":523},"Math::Abs","math_abs","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_abs","logic-block-math_abs",{"title":525,"slug":526,"path":527,"order":88,"template":377,"translation_key":528},"Math::Add","math_add","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_add","logic-block-math_add",{"title":530,"slug":531,"path":532,"order":88,"template":377,"translation_key":533},"Math::Average","math_average","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_average","logic-block-math_average",{"title":535,"slug":536,"path":537,"order":88,"template":377,"translation_key":538},"Math::Ceil","math_ceil","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_ceil","logic-block-math_ceil",{"title":540,"slug":541,"path":542,"order":88,"template":377,"translation_key":543},"Math::Divide","math_divide","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_divide","logic-block-math_divide",{"title":545,"slug":546,"path":547,"order":88,"template":377,"translation_key":548},"Math::Floor","math_floor","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_floor","logic-block-math_floor",{"title":550,"slug":551,"path":552,"order":88,"template":377,"translation_key":553},"Math::Max","math_max","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_max","logic-block-math_max",{"title":555,"slug":556,"path":557,"order":88,"template":377,"translation_key":558},"Math::Min","math_min","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_min","logic-block-math_min",{"title":560,"slug":561,"path":562,"order":88,"template":377,"translation_key":563},"Math::Modulo","math_modulo","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_modulo","logic-block-math_modulo",{"title":565,"slug":566,"path":567,"order":88,"template":377,"translation_key":568},"Math::Multiply","math_multiply","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_multiply","logic-block-math_multiply",{"title":570,"slug":571,"path":572,"order":88,"template":377,"translation_key":573},"Math::Random","math_random","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_random","logic-block-math_random",{"title":575,"slug":576,"path":577,"order":88,"template":377,"translation_key":578},"Math::Round","math_round","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_round","logic-block-math_round",{"title":580,"slug":581,"path":582,"order":88,"template":377,"translation_key":583},"Math::Subtract","math_subtract","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_subtract","logic-block-math_subtract",{"title":585,"slug":586,"path":587,"order":88,"template":377,"translation_key":588},"Motor axis","motor_axis","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmotor_axis","logic-block-motor_axis",{"title":590,"slug":591,"path":592,"order":88,"template":377,"translation_key":593},"Moving average","moving_average","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmoving_average","logic-block-moving_average",{"title":595,"slug":596,"path":597,"order":88,"template":377,"translation_key":598},"Number to string","number_to_string","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fnumber_to_string","logic-block-number_to_string",{"title":600,"slug":601,"path":602,"order":88,"template":377,"translation_key":603},"Numeric latch","numeric_latch","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fnumeric_latch","logic-block-numeric_latch",{"title":605,"slug":606,"path":607,"order":88,"template":377,"translation_key":608},"Numeric predicate","numeric_predicate","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fnumeric_predicate","logic-block-numeric_predicate",{"title":610,"slug":611,"path":612,"order":88,"template":377,"translation_key":613},"Numeric throttle","numeric_throttle","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fnumeric_throttle","logic-block-numeric_throttle",{"title":615,"slug":616,"path":617,"order":88,"template":377,"translation_key":618},"PubSub::Publish","pubsub","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fpubsub","logic-block-pubsub",{"title":620,"slug":621,"path":622,"order":88,"template":377,"translation_key":623},"Pulse counter","pulse_counter","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fpulse_counter","logic-block-pulse_counter",{"title":625,"slug":626,"path":627,"order":88,"template":377,"translation_key":628},"Pulse gate","pulse_gate","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fpulse_gate","logic-block-pulse_gate",{"title":630,"slug":631,"path":632,"order":88,"template":377,"translation_key":633},"Pulse throttle","pulse_throttle","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fpulse_throttle","logic-block-pulse_throttle",{"title":635,"slug":636,"path":637,"order":88,"template":377,"translation_key":638},"Sequencer","sequencer","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fsequencer","logic-block-sequencer",{"title":640,"slug":641,"path":642,"order":88,"template":377,"translation_key":643},"Shading","shading","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fshading","logic-block-shading",{"title":645,"slug":646,"path":647,"order":88,"template":377,"translation_key":648},"String format","string_format","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fstring_format","logic-block-string_format",{"title":650,"slug":651,"path":652,"order":88,"template":377,"translation_key":653},"String latch","string_latch","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fstring_latch","logic-block-string_latch",{"title":655,"slug":656,"path":657,"order":88,"template":377,"translation_key":658},"Toggle","toggle","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Ftoggle","logic-block-toggle",{"title":660,"slug":661,"path":662,"order":88,"template":377,"translation_key":663},"Variable Delayed Pulse","variable_delayed_pulse","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fvariable_delayed_pulse","logic-block-variable_delayed_pulse",{"title":665,"slug":666,"path":667,"order":105,"children":668},"Output","output","en\u002Fdocs\u002Flogic-blocks\u002Foutput",[669,674],{"title":670,"slug":671,"path":672,"order":88,"template":377,"translation_key":673},"Mode controller","operation_mode_controller","en\u002Fdocs\u002Flogic-blocks\u002Foutput\u002Foperation_mode_controller","logic-block-operation_mode_controller",{"title":675,"slug":676,"path":677,"order":88,"template":377,"translation_key":678},"Relay","relay","en\u002Fdocs\u002Flogic-blocks\u002Foutput\u002Frelay","logic-block-relay",{"title":680,"slug":681,"path":682,"order":124,"children":683},"Volang Programming Language","volang","en\u002Fdocs\u002Fvolang",[684,688],{"title":685,"slug":686,"path":687,"order":94},"The Volang Language","language","en\u002Fdocs\u002Fvolang\u002Flanguage",{"title":689,"slug":690,"path":691,"order":100,"template":692},"Standard Library","stdlib","en\u002Fdocs\u002Fvolang\u002Fstdlib","api-reference",{"title":694,"slug":695,"path":696,"order":697,"children":698},"Software & Tools","software","en\u002Fdocs\u002Fsoftware",7,[699,703],{"title":700,"slug":701,"path":702,"order":94},"Voldeno Studio - Installation and Walkthrough","studio","en\u002Fdocs\u002Fsoftware\u002Fstudio",{"title":704,"slug":705,"path":706,"order":100},"Voldeno Studio - Schedules","schedules","en\u002Fdocs\u002Fsoftware\u002Fschedules",{"title":708,"slug":709,"path":710,"order":711,"children":712},"How-to Guides & Recipes","how-to","en\u002Fdocs\u002Fhow-to",8,[713,717,721,725],{"title":714,"slug":715,"path":716,"order":94},"What is a smart home and how does it work?","what-is-a-smart-home","en\u002Fdocs\u002Fhow-to\u002Fwhat-is-a-smart-home",{"title":718,"slug":719,"path":720,"order":100},"How to choose a smart home system: a practical guide","how-to-choose-a-smart-home-system","en\u002Fdocs\u002Fhow-to\u002Fhow-to-choose-a-smart-home-system",{"title":722,"slug":723,"path":724,"order":105},"How much does a smart home cost? Three Voldeno installation variants with modules and prices","how-much-does-a-smart-home-cost","en\u002Fdocs\u002Fhow-to\u002Fhow-much-does-a-smart-home-cost",{"title":726,"slug":727,"path":728,"order":114},"7 most common smart home design mistakes","smart-home-design-mistakes","en\u002Fdocs\u002Fhow-to\u002Fsmart-home-design-mistakes",{"title":730,"slug":731,"path":732,"order":733,"children":734},"Troubleshooting & Diagnostics","troubleshooting","en\u002Fdocs\u002Ftroubleshooting",9,[735],{"title":736,"slug":737,"path":738,"order":94},"Bus Communication Troubleshooting","bus-communication","en\u002Fdocs\u002Ftroubleshooting\u002Fbus-communication",{"title":740,"slug":741,"path":742,"order":743},"Frequently Asked Questions","faq","en\u002Fdocs\u002Ffaq",10,[745,763,771,791,802,941,951,961,982,990],{"title":746,"slug":747,"path":748,"order":94,"children":749},"Erste Schritte","erste-schritte","de\u002Fdocs\u002Ferste-schritte",[750,753,756,760],{"title":751,"slug":296,"path":752,"order":94},"Grundlegende Konzepte und Terminologie","de\u002Fdocs\u002Ferste-schritte\u002Fconcepts",{"title":754,"slug":300,"path":755,"order":100},"Systemüberblick für Installateure","de\u002Fdocs\u002Ferste-schritte\u002Fsystem-overview",{"title":757,"slug":758,"path":759,"order":105},"Logik in Voldeno Studio von Grund auf definieren","logik-von-grund-auf-definieren","de\u002Fdocs\u002Ferste-schritte\u002Flogik-von-grund-auf-definieren",{"title":761,"slug":308,"path":762,"order":114},"Volang und VolangVM: warum ein Smart Home eine eigene Automatisierungssprache braucht","de\u002Fdocs\u002Ferste-schritte\u002Fvolang-and-volangvm",{"title":764,"slug":765,"path":766,"order":100,"children":767},"Systemarchitektur","systemarchitektur","de\u002Fdocs\u002Fsystemarchitektur",[768],{"title":769,"slug":317,"path":770,"order":94},"Sicherheitsarchitektur","de\u002Fdocs\u002Fsystemarchitektur\u002Fsecurity",{"title":772,"slug":773,"path":774,"order":105,"children":775},"Module und Peripherie","module","de\u002Fdocs\u002Fmodule",[776,779,782,785,788],{"title":777,"slug":326,"path":778,"order":94},"Verkabelung des Hub-Moduls","de\u002Fdocs\u002Fmodule\u002Fhub-wiring",{"title":780,"slug":330,"path":781,"order":100},"Verkabelung des I\u002FO-Moduls","de\u002Fdocs\u002Fmodule\u002Fio-wiring",{"title":783,"slug":334,"path":784,"order":105},"Verkabelung des Relay-Moduls","de\u002Fdocs\u002Fmodule\u002Frelay-wiring",{"title":786,"slug":338,"path":787,"order":114},"Verkabelung des 1-Wire-Moduls","de\u002Fdocs\u002Fmodule\u002F1wire-wiring",{"title":789,"slug":342,"path":790,"order":119},"Verkabelung des Analog-Input-Moduls","de\u002Fdocs\u002Fmodule\u002Fanalog-input-wiring",{"title":792,"slug":793,"path":794,"order":114,"children":795},"Verkabelungsrichtlinien","verkabelung","de\u002Fdocs\u002Fverkabelung",[796,799],{"title":797,"slug":351,"path":798,"order":94},"Bustopologie und Verkabelung","de\u002Fdocs\u002Fverkabelung\u002Fbus-topology",{"title":800,"slug":355,"path":801,"order":100},"Dimensionierung und Verteilung der Spannungsversorgung","de\u002Fdocs\u002Fverkabelung\u002Fpower-supply",{"title":803,"slug":804,"path":805,"order":119,"children":806},"Logikbausteine","logikbausteine","de\u002Fdocs\u002Flogikbausteine",[807,811,833,933],{"title":808,"slug":809,"path":810,"order":88,"template":366,"translation_key":367},"Übersicht","uebersicht","de\u002Fdocs\u002Flogikbausteine\u002Fuebersicht",{"title":812,"slug":370,"path":813,"order":94,"children":814},"Eingänge","de\u002Fdocs\u002Flogikbausteine\u002Finput",[815,817,819,821,823,825,827,829,831],{"title":374,"slug":375,"path":816,"order":88,"template":377,"translation_key":378},"de\u002Fdocs\u002Flogikbausteine\u002Finput\u002Fbinary_input",{"title":380,"slug":381,"path":818,"order":88,"template":377,"translation_key":383},"de\u002Fdocs\u002Flogikbausteine\u002Finput\u002Fboolean_constant",{"title":385,"slug":386,"path":820,"order":88,"template":377,"translation_key":388},"de\u002Fdocs\u002Flogikbausteine\u002Finput\u002Fnumeric_constant",{"title":390,"slug":391,"path":822,"order":88,"template":377,"translation_key":393},"de\u002Fdocs\u002Flogikbausteine\u002Finput\u002Fnumeric_input",{"title":395,"slug":396,"path":824,"order":88,"template":377,"translation_key":398},"de\u002Fdocs\u002Flogikbausteine\u002Finput\u002Foperation_mode_monitor",{"title":400,"slug":401,"path":826,"order":88,"template":377,"translation_key":403},"de\u002Fdocs\u002Flogikbausteine\u002Finput\u002Fpulse_at",{"title":405,"slug":406,"path":828,"order":88,"template":377,"translation_key":408},"de\u002Fdocs\u002Flogikbausteine\u002Finput\u002Fschedule",{"title":410,"slug":411,"path":830,"order":88,"template":377,"translation_key":413},"de\u002Fdocs\u002Flogikbausteine\u002Finput\u002Fstring_constant",{"title":415,"slug":416,"path":832,"order":88,"template":377,"translation_key":418},"de\u002Fdocs\u002Flogikbausteine\u002Finput\u002Fswitch",{"title":834,"slug":421,"path":835,"order":100,"children":836},"Verarbeitung","de\u002Fdocs\u002Flogikbausteine\u002Fprocess",[837,839,841,843,845,847,849,851,853,855,857,859,861,863,865,867,869,871,873,875,877,879,881,883,885,887,889,891,893,895,897,899,901,903,905,907,909,911,913,915,917,919,921,923,925,927,929,931],{"title":425,"slug":426,"path":838,"order":88,"template":377,"translation_key":428},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fbinary_limiter",{"title":430,"slug":431,"path":840,"order":88,"template":377,"translation_key":433},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fboolean_to_string",{"title":435,"slug":436,"path":842,"order":88,"template":377,"translation_key":438},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fclimate_regulator",{"title":440,"slug":441,"path":844,"order":88,"template":377,"translation_key":443},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fclimate_regulator_hub",{"title":445,"slug":446,"path":846,"order":88,"template":377,"translation_key":448},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fdelay",{"title":450,"slug":451,"path":848,"order":88,"template":377,"translation_key":453},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fdelayed_pulse",{"title":455,"slug":456,"path":850,"order":88,"template":377,"translation_key":458},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fdoor_window_monitor",{"title":460,"slug":461,"path":852,"order":88,"template":377,"translation_key":463},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fedge_detector",{"title":465,"slug":466,"path":854,"order":88,"template":377,"translation_key":468},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fgate",{"title":470,"slug":471,"path":856,"order":88,"template":377,"translation_key":473},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fhttp_request",{"title":475,"slug":476,"path":858,"order":88,"template":377,"translation_key":478},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fhysteresis",{"title":480,"slug":481,"path":860,"order":88,"template":377,"translation_key":483},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Firrigation",{"title":485,"slug":486,"path":862,"order":88,"template":377,"translation_key":488},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fjson_get_boolean",{"title":490,"slug":491,"path":864,"order":88,"template":377,"translation_key":493},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fjson_get_number",{"title":495,"slug":496,"path":866,"order":88,"template":377,"translation_key":498},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fjson_get_string",{"title":500,"slug":501,"path":868,"order":88,"template":377,"translation_key":503},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Flevel_to_pulse",{"title":505,"slug":506,"path":870,"order":88,"template":377,"translation_key":508},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Flogic_and",{"title":510,"slug":511,"path":872,"order":88,"template":377,"translation_key":513},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Flogic_not",{"title":515,"slug":516,"path":874,"order":88,"template":377,"translation_key":518},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Flogic_or",{"title":520,"slug":521,"path":876,"order":88,"template":377,"translation_key":523},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_abs",{"title":525,"slug":526,"path":878,"order":88,"template":377,"translation_key":528},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_add",{"title":530,"slug":531,"path":880,"order":88,"template":377,"translation_key":533},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_average",{"title":535,"slug":536,"path":882,"order":88,"template":377,"translation_key":538},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_ceil",{"title":540,"slug":541,"path":884,"order":88,"template":377,"translation_key":543},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_divide",{"title":545,"slug":546,"path":886,"order":88,"template":377,"translation_key":548},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_floor",{"title":550,"slug":551,"path":888,"order":88,"template":377,"translation_key":553},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_max",{"title":555,"slug":556,"path":890,"order":88,"template":377,"translation_key":558},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_min",{"title":560,"slug":561,"path":892,"order":88,"template":377,"translation_key":563},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_modulo",{"title":565,"slug":566,"path":894,"order":88,"template":377,"translation_key":568},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_multiply",{"title":570,"slug":571,"path":896,"order":88,"template":377,"translation_key":573},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_random",{"title":575,"slug":576,"path":898,"order":88,"template":377,"translation_key":578},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_round",{"title":580,"slug":581,"path":900,"order":88,"template":377,"translation_key":583},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_subtract",{"title":585,"slug":586,"path":902,"order":88,"template":377,"translation_key":588},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmotor_axis",{"title":590,"slug":591,"path":904,"order":88,"template":377,"translation_key":593},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmoving_average",{"title":595,"slug":596,"path":906,"order":88,"template":377,"translation_key":598},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fnumber_to_string",{"title":600,"slug":601,"path":908,"order":88,"template":377,"translation_key":603},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fnumeric_latch",{"title":605,"slug":606,"path":910,"order":88,"template":377,"translation_key":608},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fnumeric_predicate",{"title":610,"slug":611,"path":912,"order":88,"template":377,"translation_key":613},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fnumeric_throttle",{"title":615,"slug":616,"path":914,"order":88,"template":377,"translation_key":618},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fpubsub",{"title":620,"slug":621,"path":916,"order":88,"template":377,"translation_key":623},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fpulse_counter",{"title":625,"slug":626,"path":918,"order":88,"template":377,"translation_key":628},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fpulse_gate",{"title":630,"slug":631,"path":920,"order":88,"template":377,"translation_key":633},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fpulse_throttle",{"title":635,"slug":636,"path":922,"order":88,"template":377,"translation_key":638},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fsequencer",{"title":640,"slug":641,"path":924,"order":88,"template":377,"translation_key":643},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fshading",{"title":645,"slug":646,"path":926,"order":88,"template":377,"translation_key":648},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fstring_format",{"title":650,"slug":651,"path":928,"order":88,"template":377,"translation_key":653},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fstring_latch",{"title":655,"slug":656,"path":930,"order":88,"template":377,"translation_key":658},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Ftoggle",{"title":660,"slug":661,"path":932,"order":88,"template":377,"translation_key":663},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fvariable_delayed_pulse",{"title":934,"slug":666,"path":935,"order":105,"children":936},"Ausgänge","de\u002Fdocs\u002Flogikbausteine\u002Foutput",[937,939],{"title":670,"slug":671,"path":938,"order":88,"template":377,"translation_key":673},"de\u002Fdocs\u002Flogikbausteine\u002Foutput\u002Foperation_mode_controller",{"title":675,"slug":676,"path":940,"order":88,"template":377,"translation_key":678},"de\u002Fdocs\u002Flogikbausteine\u002Foutput\u002Frelay",{"title":942,"slug":681,"path":943,"order":124,"children":944},"Programmiersprache Volang","de\u002Fdocs\u002Fvolang",[945,948],{"title":946,"slug":686,"path":947,"order":94},"Die Sprache Volang","de\u002Fdocs\u002Fvolang\u002Flanguage",{"title":949,"slug":690,"path":950,"order":100,"template":692},"Standardbibliothek","de\u002Fdocs\u002Fvolang\u002Fstdlib",{"title":952,"slug":695,"path":953,"order":697,"children":954},"Software und Werkzeuge","de\u002Fdocs\u002Fsoftware",[955,958],{"title":956,"slug":701,"path":957,"order":94},"Voldeno Studio - Installation und Rundgang","de\u002Fdocs\u002Fsoftware\u002Fstudio",{"title":959,"slug":705,"path":960,"order":100},"Voldeno Studio - Zeitpläne","de\u002Fdocs\u002Fsoftware\u002Fschedules",{"title":962,"slug":963,"path":964,"order":711,"children":965},"Ratgeber und Anleitungen","ratgeber","de\u002Fdocs\u002Fratgeber",[966,970,974,978],{"title":967,"slug":968,"path":969,"order":94},"Was ist ein Smart Home und wie funktioniert es?","was-ist-ein-smart-home","de\u002Fdocs\u002Fratgeber\u002Fwas-ist-ein-smart-home",{"title":971,"slug":972,"path":973,"order":100},"Welches Smart-Home-System sollte man wählen? Ein praktischer Leitfaden","smart-home-system-auswaehlen","de\u002Fdocs\u002Fratgeber\u002Fsmart-home-system-auswaehlen",{"title":975,"slug":976,"path":977,"order":105},"Was kostet ein Smart Home? Drei Voldeno-Installationsvarianten mit Modulen und Preisen","was-kostet-ein-smart-home","de\u002Fdocs\u002Fratgeber\u002Fwas-kostet-ein-smart-home",{"title":979,"slug":980,"path":981,"order":114},"Die 7 häufigsten Fehler bei der Smart-Home-Planung","smart-home-planungsfehler","de\u002Fdocs\u002Fratgeber\u002Fsmart-home-planungsfehler",{"title":983,"slug":984,"path":985,"order":733,"children":986},"Fehlerbehebung und Diagnose","fehlerbehebung","de\u002Fdocs\u002Ffehlerbehebung",[987],{"title":988,"slug":737,"path":989,"order":94},"Fehlerbehebung bei der Bus-Kommunikation","de\u002Fdocs\u002Ffehlerbehebung\u002Fbus-communication",{"title":991,"slug":741,"path":992,"order":743},"Häufig gestellte Fragen","de\u002Fdocs\u002Ffaq",[994,1015,1024,1049,1062,1201,1213,1224,1245,1254],{"title":995,"slug":996,"path":997,"order":94,"children":998},"Pierwsze kroki","pierwsze-kroki","pl\u002Fdocs\u002Fpierwsze-kroki",[999,1003,1007,1011],{"title":1000,"slug":1001,"path":1002,"order":94},"Podstawowe pojęcia i terminologia","pojecia","pl\u002Fdocs\u002Fpierwsze-kroki\u002Fpojecia",{"title":1004,"slug":1005,"path":1006,"order":100},"Przegląd systemu dla instalatorów","przeglad-systemu","pl\u002Fdocs\u002Fpierwsze-kroki\u002Fprzeglad-systemu",{"title":1008,"slug":1009,"path":1010,"order":105},"Jak zdefiniować logikę w Voldeno Studio od zera","definiowanie-logiki-w-voldeno-studio","pl\u002Fdocs\u002Fpierwsze-kroki\u002Fdefiniowanie-logiki-w-voldeno-studio",{"title":1012,"slug":1013,"path":1014,"order":114},"Volang i VolangVM: po co inteligentny dom potrzebuje własnego języka automatyki","volang-i-volangvm","pl\u002Fdocs\u002Fpierwsze-kroki\u002Fvolang-i-volangvm",{"title":1016,"slug":1017,"path":1018,"order":100,"children":1019},"Architektura systemu","architektura-systemu","pl\u002Fdocs\u002Farchitektura-systemu",[1020],{"title":1021,"slug":1022,"path":1023,"order":94},"Architektura bezpieczeństwa","bezpieczenstwo","pl\u002Fdocs\u002Farchitektura-systemu\u002Fbezpieczenstwo",{"title":1025,"slug":1026,"path":1027,"order":105,"children":1028},"Moduły i peryferia","moduly","pl\u002Fdocs\u002Fmoduly",[1029,1033,1037,1041,1045],{"title":1030,"slug":1031,"path":1032,"order":94},"Okablowanie modułu HUB","okablowanie-hub","pl\u002Fdocs\u002Fmoduly\u002Fokablowanie-hub",{"title":1034,"slug":1035,"path":1036,"order":100},"Okablowanie modułu I\u002FO","okablowanie-io","pl\u002Fdocs\u002Fmoduly\u002Fokablowanie-io",{"title":1038,"slug":1039,"path":1040,"order":105},"Okablowanie modułu RELAY","okablowanie-relay","pl\u002Fdocs\u002Fmoduly\u002Fokablowanie-relay",{"title":1042,"slug":1043,"path":1044,"order":114},"Okablowanie modułu 1-Wire","okablowanie-1wire","pl\u002Fdocs\u002Fmoduly\u002Fokablowanie-1wire",{"title":1046,"slug":1047,"path":1048,"order":119},"Okablowanie modułu Analog Input","okablowanie-analog-input","pl\u002Fdocs\u002Fmoduly\u002Fokablowanie-analog-input",{"title":1050,"slug":1051,"path":1052,"order":114,"children":1053},"Wytyczne okablowania","okablowanie","pl\u002Fdocs\u002Fokablowanie",[1054,1058],{"title":1055,"slug":1056,"path":1057,"order":94},"Topologia i okablowanie magistrali","topologia-magistrali","pl\u002Fdocs\u002Fokablowanie\u002Ftopologia-magistrali",{"title":1059,"slug":1060,"path":1061,"order":100},"Dobór i dystrybucja zasilania","zasilanie","pl\u002Fdocs\u002Fokablowanie\u002Fzasilanie",{"title":1063,"slug":1064,"path":1065,"order":119,"children":1066},"Bloki logiczne","bloki-logiczne","pl\u002Fdocs\u002Fbloki-logiczne",[1067,1071,1093,1193],{"title":1068,"slug":1069,"path":1070,"order":88,"template":366,"translation_key":367},"Przegląd","przeglad","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprzeglad",{"title":1072,"slug":370,"path":1073,"order":94,"children":1074},"Wejścia","pl\u002Fdocs\u002Fbloki-logiczne\u002Finput",[1075,1077,1079,1081,1083,1085,1087,1089,1091],{"title":374,"slug":375,"path":1076,"order":88,"template":377,"translation_key":378},"pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Fbinary_input",{"title":380,"slug":381,"path":1078,"order":88,"template":377,"translation_key":383},"pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Fboolean_constant",{"title":385,"slug":386,"path":1080,"order":88,"template":377,"translation_key":388},"pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Fnumeric_constant",{"title":390,"slug":391,"path":1082,"order":88,"template":377,"translation_key":393},"pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Fnumeric_input",{"title":395,"slug":396,"path":1084,"order":88,"template":377,"translation_key":398},"pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Foperation_mode_monitor",{"title":400,"slug":401,"path":1086,"order":88,"template":377,"translation_key":403},"pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Fpulse_at",{"title":405,"slug":406,"path":1088,"order":88,"template":377,"translation_key":408},"pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Fschedule",{"title":410,"slug":411,"path":1090,"order":88,"template":377,"translation_key":413},"pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Fstring_constant",{"title":415,"slug":416,"path":1092,"order":88,"template":377,"translation_key":418},"pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Fswitch",{"title":1094,"slug":421,"path":1095,"order":100,"children":1096},"Przetwarzanie","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess",[1097,1099,1101,1103,1105,1107,1109,1111,1113,1115,1117,1119,1121,1123,1125,1127,1129,1131,1133,1135,1137,1139,1141,1143,1145,1147,1149,1151,1153,1155,1157,1159,1161,1163,1165,1167,1169,1171,1173,1175,1177,1179,1181,1183,1185,1187,1189,1191],{"title":425,"slug":426,"path":1098,"order":88,"template":377,"translation_key":428},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fbinary_limiter",{"title":430,"slug":431,"path":1100,"order":88,"template":377,"translation_key":433},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fboolean_to_string",{"title":435,"slug":436,"path":1102,"order":88,"template":377,"translation_key":438},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fclimate_regulator",{"title":440,"slug":441,"path":1104,"order":88,"template":377,"translation_key":443},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fclimate_regulator_hub",{"title":445,"slug":446,"path":1106,"order":88,"template":377,"translation_key":448},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fdelay",{"title":450,"slug":451,"path":1108,"order":88,"template":377,"translation_key":453},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fdelayed_pulse",{"title":455,"slug":456,"path":1110,"order":88,"template":377,"translation_key":458},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fdoor_window_monitor",{"title":460,"slug":461,"path":1112,"order":88,"template":377,"translation_key":463},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fedge_detector",{"title":465,"slug":466,"path":1114,"order":88,"template":377,"translation_key":468},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fgate",{"title":470,"slug":471,"path":1116,"order":88,"template":377,"translation_key":473},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fhttp_request",{"title":475,"slug":476,"path":1118,"order":88,"template":377,"translation_key":478},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fhysteresis",{"title":480,"slug":481,"path":1120,"order":88,"template":377,"translation_key":483},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Firrigation",{"title":485,"slug":486,"path":1122,"order":88,"template":377,"translation_key":488},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fjson_get_boolean",{"title":490,"slug":491,"path":1124,"order":88,"template":377,"translation_key":493},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fjson_get_number",{"title":495,"slug":496,"path":1126,"order":88,"template":377,"translation_key":498},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fjson_get_string",{"title":500,"slug":501,"path":1128,"order":88,"template":377,"translation_key":503},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Flevel_to_pulse",{"title":505,"slug":506,"path":1130,"order":88,"template":377,"translation_key":508},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Flogic_and",{"title":510,"slug":511,"path":1132,"order":88,"template":377,"translation_key":513},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Flogic_not",{"title":515,"slug":516,"path":1134,"order":88,"template":377,"translation_key":518},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Flogic_or",{"title":520,"slug":521,"path":1136,"order":88,"template":377,"translation_key":523},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_abs",{"title":525,"slug":526,"path":1138,"order":88,"template":377,"translation_key":528},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_add",{"title":530,"slug":531,"path":1140,"order":88,"template":377,"translation_key":533},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_average",{"title":535,"slug":536,"path":1142,"order":88,"template":377,"translation_key":538},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_ceil",{"title":540,"slug":541,"path":1144,"order":88,"template":377,"translation_key":543},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_divide",{"title":545,"slug":546,"path":1146,"order":88,"template":377,"translation_key":548},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_floor",{"title":550,"slug":551,"path":1148,"order":88,"template":377,"translation_key":553},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_max",{"title":555,"slug":556,"path":1150,"order":88,"template":377,"translation_key":558},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_min",{"title":560,"slug":561,"path":1152,"order":88,"template":377,"translation_key":563},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_modulo",{"title":565,"slug":566,"path":1154,"order":88,"template":377,"translation_key":568},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_multiply",{"title":570,"slug":571,"path":1156,"order":88,"template":377,"translation_key":573},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_random",{"title":575,"slug":576,"path":1158,"order":88,"template":377,"translation_key":578},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_round",{"title":580,"slug":581,"path":1160,"order":88,"template":377,"translation_key":583},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_subtract",{"title":585,"slug":586,"path":1162,"order":88,"template":377,"translation_key":588},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmotor_axis",{"title":590,"slug":591,"path":1164,"order":88,"template":377,"translation_key":593},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmoving_average",{"title":595,"slug":596,"path":1166,"order":88,"template":377,"translation_key":598},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fnumber_to_string",{"title":600,"slug":601,"path":1168,"order":88,"template":377,"translation_key":603},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fnumeric_latch",{"title":605,"slug":606,"path":1170,"order":88,"template":377,"translation_key":608},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fnumeric_predicate",{"title":610,"slug":611,"path":1172,"order":88,"template":377,"translation_key":613},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fnumeric_throttle",{"title":615,"slug":616,"path":1174,"order":88,"template":377,"translation_key":618},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fpubsub",{"title":620,"slug":621,"path":1176,"order":88,"template":377,"translation_key":623},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fpulse_counter",{"title":625,"slug":626,"path":1178,"order":88,"template":377,"translation_key":628},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fpulse_gate",{"title":630,"slug":631,"path":1180,"order":88,"template":377,"translation_key":633},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fpulse_throttle",{"title":635,"slug":636,"path":1182,"order":88,"template":377,"translation_key":638},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fsequencer",{"title":640,"slug":641,"path":1184,"order":88,"template":377,"translation_key":643},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fshading",{"title":645,"slug":646,"path":1186,"order":88,"template":377,"translation_key":648},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fstring_format",{"title":650,"slug":651,"path":1188,"order":88,"template":377,"translation_key":653},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fstring_latch",{"title":655,"slug":656,"path":1190,"order":88,"template":377,"translation_key":658},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Ftoggle",{"title":660,"slug":661,"path":1192,"order":88,"template":377,"translation_key":663},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fvariable_delayed_pulse",{"title":1194,"slug":666,"path":1195,"order":105,"children":1196},"Wyjścia","pl\u002Fdocs\u002Fbloki-logiczne\u002Foutput",[1197,1199],{"title":670,"slug":671,"path":1198,"order":88,"template":377,"translation_key":673},"pl\u002Fdocs\u002Fbloki-logiczne\u002Foutput\u002Foperation_mode_controller",{"title":675,"slug":676,"path":1200,"order":88,"template":377,"translation_key":678},"pl\u002Fdocs\u002Fbloki-logiczne\u002Foutput\u002Frelay",{"title":1202,"slug":681,"path":1203,"order":124,"children":1204},"Język programowania Volang","pl\u002Fdocs\u002Fvolang",[1205,1209],{"title":1206,"slug":1207,"path":1208,"order":94},"Język Volang","jezyk","pl\u002Fdocs\u002Fvolang\u002Fjezyk",{"title":1210,"slug":1211,"path":1212,"order":100,"template":692},"Biblioteka standardowa","biblioteka-standardowa","pl\u002Fdocs\u002Fvolang\u002Fbiblioteka-standardowa",{"title":1214,"slug":1215,"path":1216,"order":697,"children":1217},"Oprogramowanie","oprogramowanie","pl\u002Fdocs\u002Foprogramowanie",[1218,1221],{"title":1219,"slug":701,"path":1220,"order":94},"Voldeno Studio - Instalacja i przewodnik","pl\u002Fdocs\u002Foprogramowanie\u002Fstudio",{"title":1222,"slug":705,"path":1223,"order":100},"Voldeno Studio - Harmonogramy","pl\u002Fdocs\u002Foprogramowanie\u002Fschedules",{"title":1225,"slug":1226,"path":1227,"order":711,"children":1228},"Poradniki","poradniki","pl\u002Fdocs\u002Fporadniki",[1229,1233,1237,1241],{"title":1230,"slug":1231,"path":1232,"order":94},"Czym jest smart home i jak działa?","czym-jest-smart-home","pl\u002Fdocs\u002Fporadniki\u002Fczym-jest-smart-home",{"title":1234,"slug":1235,"path":1236,"order":100},"Jaki system smart home wybrać? Praktyczny przewodnik","jaki-system-smart-home-wybrac","pl\u002Fdocs\u002Fporadniki\u002Fjaki-system-smart-home-wybrac",{"title":1238,"slug":1239,"path":1240,"order":105},"Ile kosztuje inteligentny dom? Trzy warianty instalacji Voldeno z modułami i cenami","ile-kosztuje-inteligentny-dom","pl\u002Fdocs\u002Fporadniki\u002File-kosztuje-inteligentny-dom",{"title":1242,"slug":1243,"path":1244,"order":114},"7 najczęstszych błędów przy projektowaniu instalacji smart home","bledy-przy-projektowaniu-smart-home","pl\u002Fdocs\u002Fporadniki\u002Fbledy-przy-projektowaniu-smart-home",{"title":1246,"slug":1247,"path":1248,"order":733,"children":1249},"Diagnostyka i rozwiązywanie problemów","diagnostyka","pl\u002Fdocs\u002Fdiagnostyka",[1250],{"title":1251,"slug":1252,"path":1253,"order":94},"Rozwiązywanie problemów z komunikacją magistrali","komunikacja-magistrali","pl\u002Fdocs\u002Fdiagnostyka\u002Fkomunikacja-magistrali",{"title":1255,"slug":741,"path":1256,"order":743},"Często zadawane pytania","pl\u002Fdocs\u002Ffaq",[1258,1274,1281,1300,1310,1443,1453,1463,1479,1486],{"title":1259,"slug":291,"path":1260,"order":94,"children":1261},"はじめに","ja\u002Fdocs\u002Fgetting-started",[1262,1265,1268,1271],{"title":1263,"slug":296,"path":1264,"order":94},"基本概念と用語","ja\u002Fdocs\u002Fgetting-started\u002Fconcepts",{"title":1266,"slug":300,"path":1267,"order":100},"インストーラー向けシステム概要","ja\u002Fdocs\u002Fgetting-started\u002Fsystem-overview",{"title":1269,"slug":304,"path":1270,"order":105},"Voldeno Studio でゼロからロジックを定義する方法","ja\u002Fdocs\u002Fgetting-started\u002Fdefine-logic-in-voldeno-studio",{"title":1272,"slug":308,"path":1273,"order":114},"Volang と VolangVM: スマートホームに専用の自動化言語が必要な理由","ja\u002Fdocs\u002Fgetting-started\u002Fvolang-and-volangvm",{"title":1275,"slug":312,"path":1276,"order":100,"children":1277},"システムアーキテクチャ","ja\u002Fdocs\u002Fsystem-architecture",[1278],{"title":1279,"slug":317,"path":1280,"order":94},"セキュリティアーキテクチャ","ja\u002Fdocs\u002Fsystem-architecture\u002Fsecurity",{"title":1282,"slug":321,"path":1283,"order":105,"children":1284},"モジュールと周辺機器","ja\u002Fdocs\u002Fmodules",[1285,1288,1291,1294,1297],{"title":1286,"slug":326,"path":1287,"order":94},"Hub モジュール配線","ja\u002Fdocs\u002Fmodules\u002Fhub-wiring",{"title":1289,"slug":330,"path":1290,"order":100},"I\u002FO モジュール配線","ja\u002Fdocs\u002Fmodules\u002Fio-wiring",{"title":1292,"slug":334,"path":1293,"order":105},"Relay モジュール配線","ja\u002Fdocs\u002Fmodules\u002Frelay-wiring",{"title":1295,"slug":338,"path":1296,"order":114},"1-Wire モジュール配線","ja\u002Fdocs\u002Fmodules\u002F1wire-wiring",{"title":1298,"slug":342,"path":1299,"order":119},"Analog Input モジュール配線","ja\u002Fdocs\u002Fmodules\u002Fanalog-input-wiring",{"title":1301,"slug":346,"path":1302,"order":114,"children":1303},"配線ガイドライン","ja\u002Fdocs\u002Fwiring",[1304,1307],{"title":1305,"slug":351,"path":1306,"order":94},"バストポロジと配線","ja\u002Fdocs\u002Fwiring\u002Fbus-topology",{"title":1308,"slug":355,"path":1309,"order":100},"電源容量の選定と分配","ja\u002Fdocs\u002Fwiring\u002Fpower-supply",{"title":358,"slug":359,"path":1311,"order":119,"children":1312},"ja\u002Fdocs\u002Flogic-blocks",[1313,1316,1337,1436],{"title":1314,"slug":364,"path":1315,"order":88,"template":366,"translation_key":367},"概要","ja\u002Fdocs\u002Flogic-blocks\u002Foverview",{"title":369,"slug":370,"path":1317,"order":94,"children":1318},"ja\u002Fdocs\u002Flogic-blocks\u002Finput",[1319,1321,1323,1325,1327,1329,1331,1333,1335],{"title":374,"slug":375,"path":1320,"order":88,"template":377,"translation_key":378},"ja\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fbinary_input",{"title":380,"slug":381,"path":1322,"order":88,"template":377,"translation_key":383},"ja\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fboolean_constant",{"title":385,"slug":386,"path":1324,"order":88,"template":377,"translation_key":388},"ja\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fnumeric_constant",{"title":390,"slug":391,"path":1326,"order":88,"template":377,"translation_key":393},"ja\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fnumeric_input",{"title":395,"slug":396,"path":1328,"order":88,"template":377,"translation_key":398},"ja\u002Fdocs\u002Flogic-blocks\u002Finput\u002Foperation_mode_monitor",{"title":400,"slug":401,"path":1330,"order":88,"template":377,"translation_key":403},"ja\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fpulse_at",{"title":405,"slug":406,"path":1332,"order":88,"template":377,"translation_key":408},"ja\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fschedule",{"title":410,"slug":411,"path":1334,"order":88,"template":377,"translation_key":413},"ja\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fstring_constant",{"title":415,"slug":416,"path":1336,"order":88,"template":377,"translation_key":418},"ja\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fswitch",{"title":420,"slug":421,"path":1338,"order":100,"children":1339},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess",[1340,1342,1344,1346,1348,1350,1352,1354,1356,1358,1360,1362,1364,1366,1368,1370,1372,1374,1376,1378,1380,1382,1384,1386,1388,1390,1392,1394,1396,1398,1400,1402,1404,1406,1408,1410,1412,1414,1416,1418,1420,1422,1424,1426,1428,1430,1432,1434],{"title":425,"slug":426,"path":1341,"order":88,"template":377,"translation_key":428},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fbinary_limiter",{"title":430,"slug":431,"path":1343,"order":88,"template":377,"translation_key":433},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fboolean_to_string",{"title":435,"slug":436,"path":1345,"order":88,"template":377,"translation_key":438},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fclimate_regulator",{"title":440,"slug":441,"path":1347,"order":88,"template":377,"translation_key":443},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fclimate_regulator_hub",{"title":445,"slug":446,"path":1349,"order":88,"template":377,"translation_key":448},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fdelay",{"title":450,"slug":451,"path":1351,"order":88,"template":377,"translation_key":453},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fdelayed_pulse",{"title":455,"slug":456,"path":1353,"order":88,"template":377,"translation_key":458},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fdoor_window_monitor",{"title":460,"slug":461,"path":1355,"order":88,"template":377,"translation_key":463},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fedge_detector",{"title":465,"slug":466,"path":1357,"order":88,"template":377,"translation_key":468},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fgate",{"title":470,"slug":471,"path":1359,"order":88,"template":377,"translation_key":473},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fhttp_request",{"title":475,"slug":476,"path":1361,"order":88,"template":377,"translation_key":478},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fhysteresis",{"title":480,"slug":481,"path":1363,"order":88,"template":377,"translation_key":483},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Firrigation",{"title":485,"slug":486,"path":1365,"order":88,"template":377,"translation_key":488},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fjson_get_boolean",{"title":490,"slug":491,"path":1367,"order":88,"template":377,"translation_key":493},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fjson_get_number",{"title":495,"slug":496,"path":1369,"order":88,"template":377,"translation_key":498},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fjson_get_string",{"title":500,"slug":501,"path":1371,"order":88,"template":377,"translation_key":503},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flevel_to_pulse",{"title":505,"slug":506,"path":1373,"order":88,"template":377,"translation_key":508},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flogic_and",{"title":510,"slug":511,"path":1375,"order":88,"template":377,"translation_key":513},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flogic_not",{"title":515,"slug":516,"path":1377,"order":88,"template":377,"translation_key":518},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flogic_or",{"title":520,"slug":521,"path":1379,"order":88,"template":377,"translation_key":523},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_abs",{"title":525,"slug":526,"path":1381,"order":88,"template":377,"translation_key":528},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_add",{"title":530,"slug":531,"path":1383,"order":88,"template":377,"translation_key":533},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_average",{"title":535,"slug":536,"path":1385,"order":88,"template":377,"translation_key":538},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_ceil",{"title":540,"slug":541,"path":1387,"order":88,"template":377,"translation_key":543},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_divide",{"title":545,"slug":546,"path":1389,"order":88,"template":377,"translation_key":548},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_floor",{"title":550,"slug":551,"path":1391,"order":88,"template":377,"translation_key":553},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_max",{"title":555,"slug":556,"path":1393,"order":88,"template":377,"translation_key":558},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_min",{"title":560,"slug":561,"path":1395,"order":88,"template":377,"translation_key":563},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_modulo",{"title":565,"slug":566,"path":1397,"order":88,"template":377,"translation_key":568},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_multiply",{"title":570,"slug":571,"path":1399,"order":88,"template":377,"translation_key":573},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_random",{"title":575,"slug":576,"path":1401,"order":88,"template":377,"translation_key":578},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_round",{"title":580,"slug":581,"path":1403,"order":88,"template":377,"translation_key":583},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_subtract",{"title":585,"slug":586,"path":1405,"order":88,"template":377,"translation_key":588},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmotor_axis",{"title":590,"slug":591,"path":1407,"order":88,"template":377,"translation_key":593},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmoving_average",{"title":595,"slug":596,"path":1409,"order":88,"template":377,"translation_key":598},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fnumber_to_string",{"title":600,"slug":601,"path":1411,"order":88,"template":377,"translation_key":603},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fnumeric_latch",{"title":605,"slug":606,"path":1413,"order":88,"template":377,"translation_key":608},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fnumeric_predicate",{"title":610,"slug":611,"path":1415,"order":88,"template":377,"translation_key":613},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fnumeric_throttle",{"title":615,"slug":616,"path":1417,"order":88,"template":377,"translation_key":618},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fpubsub",{"title":620,"slug":621,"path":1419,"order":88,"template":377,"translation_key":623},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fpulse_counter",{"title":625,"slug":626,"path":1421,"order":88,"template":377,"translation_key":628},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fpulse_gate",{"title":630,"slug":631,"path":1423,"order":88,"template":377,"translation_key":633},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fpulse_throttle",{"title":635,"slug":636,"path":1425,"order":88,"template":377,"translation_key":638},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fsequencer",{"title":640,"slug":641,"path":1427,"order":88,"template":377,"translation_key":643},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fshading",{"title":645,"slug":646,"path":1429,"order":88,"template":377,"translation_key":648},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fstring_format",{"title":650,"slug":651,"path":1431,"order":88,"template":377,"translation_key":653},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fstring_latch",{"title":655,"slug":656,"path":1433,"order":88,"template":377,"translation_key":658},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Ftoggle",{"title":660,"slug":661,"path":1435,"order":88,"template":377,"translation_key":663},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fvariable_delayed_pulse",{"title":665,"slug":666,"path":1437,"order":105,"children":1438},"ja\u002Fdocs\u002Flogic-blocks\u002Foutput",[1439,1441],{"title":670,"slug":671,"path":1440,"order":88,"template":377,"translation_key":673},"ja\u002Fdocs\u002Flogic-blocks\u002Foutput\u002Foperation_mode_controller",{"title":675,"slug":676,"path":1442,"order":88,"template":377,"translation_key":678},"ja\u002Fdocs\u002Flogic-blocks\u002Foutput\u002Frelay",{"title":1444,"slug":681,"path":1445,"order":124,"children":1446},"Volang プログラミング言語","ja\u002Fdocs\u002Fvolang",[1447,1450],{"title":1448,"slug":686,"path":1449,"order":94},"Volang 言語","ja\u002Fdocs\u002Fvolang\u002Flanguage",{"title":1451,"slug":690,"path":1452,"order":100,"template":692},"標準ライブラリ","ja\u002Fdocs\u002Fvolang\u002Fstdlib",{"title":1454,"slug":695,"path":1455,"order":697,"children":1456},"ソフトウェアとツール","ja\u002Fdocs\u002Fsoftware",[1457,1460],{"title":1458,"slug":701,"path":1459,"order":94},"Voldeno Studio — インストールと概要","ja\u002Fdocs\u002Fsoftware\u002Fstudio",{"title":1461,"slug":705,"path":1462,"order":100},"Voldeno Studio — スケジュール","ja\u002Fdocs\u002Fsoftware\u002Fschedules",{"title":1464,"slug":709,"path":1465,"order":711,"children":1466},"ハウツーガイド","ja\u002Fdocs\u002Fhow-to",[1467,1470,1473,1476],{"title":1468,"slug":715,"path":1469,"order":94},"スマートホームとは何か、どう動くのか","ja\u002Fdocs\u002Fhow-to\u002Fwhat-is-a-smart-home",{"title":1471,"slug":719,"path":1472,"order":100},"スマートホームシステムの選び方：実践ガイド","ja\u002Fdocs\u002Fhow-to\u002Fhow-to-choose-a-smart-home-system",{"title":1474,"slug":723,"path":1475,"order":105},"スマートホームの費用はいくらか？3つの Voldeno インストール例とモジュール・価格","ja\u002Fdocs\u002Fhow-to\u002Fhow-much-does-a-smart-home-cost",{"title":1477,"slug":727,"path":1478,"order":114},"スマートホーム設計でよくある7つの失敗","ja\u002Fdocs\u002Fhow-to\u002Fsmart-home-design-mistakes",{"title":1480,"slug":731,"path":1481,"order":733,"children":1482},"トラブルシューティングと診断","ja\u002Fdocs\u002Ftroubleshooting",[1483],{"title":1484,"slug":737,"path":1485,"order":94},"バス通信のトラブルシューティング","ja\u002Fdocs\u002Ftroubleshooting\u002Fbus-communication",{"title":1487,"slug":741,"path":1488,"order":743},"よくある質問","ja\u002Fdocs\u002Ffaq",{"de":1490,"en":1503,"ja":1514,"pl":1515},{"verkabelung":1491,"erste-schritte":1492,"volang":1493,"logikbausteine\u002Foutput":1494,"fehlerbehebung":1495,"logikbausteine\u002Finput":1496,"software":1497,"ratgeber":1498,"logikbausteine\u002Fprocess":1499,"logikbausteine":1500,"systemarchitektur":1501,"module":1502},"verkabelung\u002Fbus-topology","erste-schritte\u002Fconcepts","volang\u002Flanguage","logikbausteine\u002Foutput\u002Foperation_mode_controller","fehlerbehebung\u002Fbus-communication","logikbausteine\u002Finput\u002Fbinary_input","software\u002Fstudio","ratgeber\u002Fwas-ist-ein-smart-home","logikbausteine\u002Fprocess\u002Fbinary_limiter","logikbausteine\u002Fuebersicht","systemarchitektur\u002Fsecurity","module\u002Fhub-wiring",{"wiring":1504,"logic-blocks\u002Foutput":1505,"how-to":1506,"troubleshooting":1507,"volang":1493,"modules":1508,"getting-started":1509,"logic-blocks":1510,"logic-blocks\u002Fprocess":1511,"software":1497,"system-architecture":1512,"logic-blocks\u002Finput":1513},"wiring\u002Fbus-topology","logic-blocks\u002Foutput\u002Foperation_mode_controller","how-to\u002Fwhat-is-a-smart-home","troubleshooting\u002Fbus-communication","modules\u002Fhub-wiring","getting-started\u002Fconcepts","logic-blocks\u002Foverview","logic-blocks\u002Fprocess\u002Fbinary_limiter","system-architecture\u002Fsecurity","logic-blocks\u002Finput\u002Fbinary_input",{"logic-blocks\u002Foutput":1505,"how-to":1506,"software":1497,"getting-started":1509,"logic-blocks":1510,"system-architecture":1512,"troubleshooting":1507,"volang":1493,"logic-blocks\u002Finput":1513,"logic-blocks\u002Fprocess":1511,"modules":1508,"wiring":1504},{"bloki-logiczne":1516,"bloki-logiczne\u002Foutput":1517,"poradniki":1518,"oprogramowanie":1519,"bloki-logiczne\u002Finput":1520,"bloki-logiczne\u002Fprocess":1521,"architektura-systemu":1522,"okablowanie":1523,"pierwsze-kroki":1524,"moduly":1525,"volang":1526,"diagnostyka":1527},"bloki-logiczne\u002Fprzeglad","bloki-logiczne\u002Foutput\u002Foperation_mode_controller","poradniki\u002Fczym-jest-smart-home","oprogramowanie\u002Fstudio","bloki-logiczne\u002Finput\u002Fbinary_input","bloki-logiczne\u002Fprocess\u002Fbinary_limiter","architektura-systemu\u002Fbezpieczenstwo","okablowanie\u002Ftopologia-magistrali","pierwsze-kroki\u002Fpojecia","moduly\u002Fokablowanie-hub","volang\u002Fjezyk","diagnostyka\u002Fkomunikacja-magistrali",{"enabled":71,"navigation":1529},{"ja":1530,"en":1567,"pl":1586,"de":1612},[1531,1537,1543,1549,1555,1561],{"title":1532,"slug":1533,"path":1534,"order":88,"date":1535,"translation_key":1536},"スマートホームはガジェットではない：数値で見る省エネ、防犯、資産価値","smart-home-is-not-a-gadget","ja\u002Fblog\u002Fsmart-home-is-not-a-gadget","2026-07-03","2026_07_03_smart_home_is_not_a_gadget",{"title":1538,"slug":1539,"path":1540,"order":88,"date":1541,"translation_key":1542},"ゼロクロス切替：I\u002FO・RELAYモジュールがリレー接点寿命を延ばす仕組み","zero-crossing-switching-io-and-relay-modules","ja\u002Fblog\u002Fzero-crossing-switching-io-and-relay-modules","2026-06-11","2026_06_11_zero_crossing_switching",{"title":1544,"slug":1545,"path":1546,"order":88,"date":1547,"translation_key":1548},"Google Cloud Next '26：Fischertechnik工場デモをVoldenoが駆動","voldeno-at-google-cloud-next-26","ja\u002Fblog\u002Fvoldeno-at-google-cloud-next-26","2026-04-28","2026_04_28_voldeno_at_google_cloud_next_26",{"title":1550,"slug":1551,"path":1552,"order":88,"date":1553,"translation_key":1554},"準備完了：数百台のVoldenoモジュールがスマートホーム導入の準備完了","we-are-ready","ja\u002Fblog\u002Fwe-are-ready","2025-08-17","2025_08_17_we_are_ready",{"title":1556,"slug":1557,"path":1558,"order":88,"date":1559,"translation_key":1560},"新製品 SEN1WT3：コンパクトで信頼性の高い1-Wire温度センサー、大規模設備向け","new-voldeno-1-wire-temperature-sensor-compact-reliable-and-built-for-large-scale-installations","ja\u002Fblog\u002Fnew-voldeno-1-wire-temperature-sensor-compact-reliable-and-built-for-large-scale-installations","2025-04-25","2025_04_25_new_voldeno_1wire_temperature_sensor",{"title":1562,"slug":1563,"path":1564,"order":88,"date":1565,"translation_key":1566},"Voldenoで描くスマートホームの未来","future_of_smart_homes","ja\u002Fblog\u002Ffuture_of_smart_homes","2024-10-18","2024_10_18_future_of_smart_homes",[1568,1571,1574,1577,1580,1583],{"title":1569,"slug":1533,"path":1570,"order":88,"date":1535,"translation_key":1536},"A smart home is not a gadget: measurable savings, security and property value","en\u002Fblog\u002Fsmart-home-is-not-a-gadget",{"title":1572,"slug":1539,"path":1573,"order":88,"date":1541,"translation_key":1542},"Zero-crossing switching: how the I\u002FO and RELAY modules extend relay contact life","en\u002Fblog\u002Fzero-crossing-switching-io-and-relay-modules",{"title":1575,"slug":1545,"path":1576,"order":88,"date":1547,"translation_key":1548},"Voldeno powered the Fischertechnik factory demo at Google Cloud Next '26","en\u002Fblog\u002Fvoldeno-at-google-cloud-next-26",{"title":1578,"slug":1551,"path":1579,"order":88,"date":1553,"translation_key":1554},"We are ready! Hundreds of Voldeno modules prepared for smart home deployment.","en\u002Fblog\u002Fwe-are-ready",{"title":1581,"slug":1557,"path":1582,"order":88,"date":1559,"translation_key":1560},"New Voldeno 1-Wire Temperature Sensor - Compact, Reliable, and Built for Large-Scale Installations","en\u002Fblog\u002Fnew-voldeno-1-wire-temperature-sensor-compact-reliable-and-built-for-large-scale-installations",{"title":1584,"slug":1563,"path":1585,"order":88,"date":1565,"translation_key":1566},"Discover the Future of Smart Homes with Voldeno","en\u002Fblog\u002Ffuture_of_smart_homes",[1587,1592,1597,1600,1604,1608],{"title":1588,"slug":1589,"path":1590,"order":88,"date":1535,"translation_key":1591},"Inteligentny dom to nie gadżet: policzalne oszczędności, bezpieczeństwo i wartość nieruchomości","inteligentny-dom-to-nie-gadzet","pl\u002Fblog\u002Finteligentny-dom-to-nie-gadzet","2026_07_03_inteligentny_dom_to_nie_gadzet",{"title":1593,"slug":1594,"path":1595,"order":88,"date":1541,"translation_key":1596},"Przełączanie w zerze napięcia: jak moduły I\u002FO i RELAY wydłużają życie styków przekaźników","przelaczanie-w-zerze-napiecia-moduly-io-i-relay","pl\u002Fblog\u002Fprzelaczanie-w-zerze-napiecia-moduly-io-i-relay","2026_06_11_przelaczanie_w_zerze_napiecia",{"title":1598,"slug":1545,"path":1599,"order":88,"date":1547,"translation_key":1548},"System Voldeno napędził demo fabryki Fischertechnik na Google Cloud Next '26","pl\u002Fblog\u002Fvoldeno-at-google-cloud-next-26",{"title":1601,"slug":1602,"path":1603,"order":88,"date":1553,"translation_key":1554},"Jesteśmy gotowi! Setki modułów Voldeno przygotowanych do wdrożenia w inteligentnych domach.","jestesmy-gotowi-setki-modulow-voldeno-przygotowanych-do-wdrozenia-w-inteligentnych-domach","pl\u002Fblog\u002Fjestesmy-gotowi-setki-modulow-voldeno-przygotowanych-do-wdrozenia-w-inteligentnych-domach",{"title":1605,"slug":1606,"path":1607,"order":88,"date":1559,"translation_key":1560},"Nowy czujnik temperatury Voldeno 1-Wire - kompaktowy, niezawodny i stworzony do dużych instalacji","nowy-czujnik-temperatury-1-wire-voldeno-kompaktowy-niezawodny-i-zaprojektowany-do-instalacji-na-duza-skale","pl\u002Fblog\u002Fnowy-czujnik-temperatury-1-wire-voldeno-kompaktowy-niezawodny-i-zaprojektowany-do-instalacji-na-duza-skale",{"title":1609,"slug":1610,"path":1611,"order":88,"date":1565,"translation_key":1566},"Odkryj przyszłość inteligentnych domów z Voldeno","odkryj-przyszlosc-inteligentnych-domow-z-voldeno","pl\u002Fblog\u002Fodkryj-przyszlosc-inteligentnych-domow-z-voldeno",[1613,1618,1623,1628,1633,1638],{"title":1614,"slug":1615,"path":1616,"order":88,"date":1535,"translation_key":1617},"Ein Smart Home ist kein Gadget: messbare Einsparungen, Sicherheit und Immobilienwert","smart-home-ist-kein-gadget","de\u002Fblog\u002Fsmart-home-ist-kein-gadget","2026_07_03_smart_home_ist_kein_gadget",{"title":1619,"slug":1620,"path":1621,"order":88,"date":1541,"translation_key":1622},"Schalten im Nulldurchgang: Wie die Module I\u002FO und RELAY die Lebensdauer der Relaiskontakte verlängern","schalten-im-nulldurchgang-io-und-relay-module","de\u002Fblog\u002Fschalten-im-nulldurchgang-io-und-relay-module","2026_06_11_schalten_im_nulldurchgang",{"title":1624,"slug":1625,"path":1626,"order":88,"date":1547,"translation_key":1627},"Voldeno steuerte die Fischertechnik-Fabrikdemo auf der Google Cloud Next '26","fischertechnik-fabrikdemo-google-cloud-next-26","de\u002Fblog\u002Ffischertechnik-fabrikdemo-google-cloud-next-26","2026_04_28_voldeno_bei_google_cloud_next_26",{"title":1629,"slug":1630,"path":1631,"order":88,"date":1553,"translation_key":1632},"Wir sind bereit! Hunderte Voldeno-Module für den Einsatz im Smart Home vorbereitet.","wir-sind-bereit","de\u002Fblog\u002Fwir-sind-bereit","2025_08_17_wir_sind_bereit",{"title":1634,"slug":1635,"path":1636,"order":88,"date":1559,"translation_key":1637},"Neuer Voldeno 1-Wire Temperatursensor: kompakt, zuverlässig und für große Installationen gebaut","1-wire-temperatursensor-kompakt-zuverlaessig-fuer-grosse-installationen","de\u002Fblog\u002F1-wire-temperatursensor-kompakt-zuverlaessig-fuer-grosse-installationen","2025_04_25_neuer_voldeno_1wire_temperatursensor",{"title":1639,"slug":1640,"path":1641,"order":88,"date":1565,"translation_key":1642},"Entdecken Sie die Zukunft des Smart Home mit Voldeno","zukunft-des-smart-home","de\u002Fblog\u002Fzukunft-des-smart-home","2024_10_18_zukunft_smart_homes",{"map":1644,"xDefault":1645},{"pl":1645,"en":1646,"de":1647,"ja":1648},"https:\u002F\u002Fvoldeno.com\u002Fpl\u002Fdocs\u002Fvolang\u002Fbiblioteka-standardowa","https:\u002F\u002Fvoldeno.com\u002Fen\u002Fdocs\u002Fvolang\u002Fstdlib","https:\u002F\u002Fvoldeno.com\u002Fde\u002Fdocs\u002Fvolang\u002Fstdlib","https:\u002F\u002Fvoldeno.com\u002Fja\u002Fdocs\u002Fvolang\u002Fstdlib",{"slug":690,"title":1451,"description":1650,"tags":1651,"content_html":1654,"headings":1655,"template":692,"order":100,"extra":1865},"Volang 標準ライブラリの関数とモジュールのリファレンスドキュメント。",[681,690,1652,1653],"reference","functions","\u003Ch1 id=\"biao-zhun-raiburari\">\u003Ca href=\"#biao-zhun-raiburari\" class=\"anchor\">#\u003C\u002Fa> 標準ライブラリ\u003C\u002Fh1>\n\u003Cp>Volang 標準ライブラリは、テキストの加工、数学演算、その他の一般的な処理に必要な組み込み関数を幅広く提供します。これらの関数はすべてのスクリプトでグローバルに利用できます。\u003C\u002Fp>\n\u003Ch2 id=\"ru-li-cao-zuo\">\u003Ca href=\"#ru-li-cao-zuo\" class=\"anchor\">#\u003C\u002Fa> 入力操作\u003C\u002Fh2>\n\u003Cp>このセクションでは、ロジックブロック内で入力データを読み取る関数について説明します。各ロジックブロックは 1 つ以上の入力チャネルを定義できます。入力値が変わると、そのブロックのスクリプトが実行されます。これらの関数を使うと、どの入力が実行をトリガーしたかを特定し、すべての入力の現在値を読み取れます。\u003C\u002Fp>\n\u003Ch3 id=\"input-channel\">\u003Ca href=\"#input-channel\" class=\"anchor\">#\u003C\u002Fa> input::channel\u003C\u002Fh3>\n\u003Cp>現在のスクリプト実行をトリガーした入力チャネルの識別子を返します。ブロックに複数の入力がある場合、どの入力がブロックの実行原因かを判別するためにこの関数が必要になり、入力ごとに処理を分けられます。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>実行をトリガーした入力の id を含む文字列。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"variable\">channel\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">input::channel\u003C\u002Fspan>()\n\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">channel\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"string\">\"input\"\u003C\u002Fspan>) {\n    \u003Cspan class=\"comment\">\u002F\u002F The main toggle input was triggered\u003C\u002Fspan>\n    ...\n} \u003Cspan class=\"keyword\">else\u003C\u002Fspan> \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">channel\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"string\">\"on\"\u003C\u002Fspan>) {\n    \u003Cspan class=\"comment\">\u002F\u002F The dedicated \"on\" input was triggered\u003C\u002Fspan>\n    ...\n} \u003Cspan class=\"keyword\">else\u003C\u002Fspan> \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">channel\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"string\">\"off\"\u003C\u002Fspan>) {\n    \u003Cspan class=\"comment\">\u002F\u002F The dedicated \"off\" input was triggered\u003C\u002Fspan>\n    ...\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"input-value\">\u003Ca href=\"#input-value\" class=\"anchor\">#\u003C\u002Fa> input::value\u003C\u002Fh3>\n\u003Cp>現在のスクリプト実行をトリガーした入力の値を返します。戻り値の型は、入力に定義された型 (boolean、number、string) によって決まります。\u003Ccode>input::channel()\u003C\u002Fcode> と組み合わせて、どの入力が変わったかと新しい値の両方を特定します。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>トリガーとなった入力の現在値。型は入力定義 (boolean、number、string) によって決まります。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"variable\">channel\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">input::channel\u003C\u002Fspan>()\n\u003Cspan class=\"variable\">value\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">input::value\u003C\u002Fspan>()\n\n\u003Cspan class=\"comment\">\u002F\u002F React to a rising edge on a boolean input\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">channel\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"string\">\"input\"\u003C\u002Fspan> \u003Cspan class=\"keyword\">and\u003C\u002Fspan> \u003Cspan class=\"variable\">value\u003C\u002Fspan>) {\n    \u003Cspan class=\"variable\">output\u003C\u002Fspan>::\u003Cspan class=\"function\">toggle\u003C\u002Fspan>(\u003Cspan class=\"string\">\"output\"\u003C\u002Fspan>)\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"input-get\">\u003Ca href=\"#input-get\" class=\"anchor\">#\u003C\u002Fa> input::get\u003C\u002Fh3>\n\u003Cp>識別子を指定して、特定の入力の最後に知られている値を取得します。\u003Ccode>input::value()\u003C\u002Fcode> が現在の実行をトリガーした入力の値だけを返すのに対し、この関数はいつでも任意の入力に保存された値を読み取れます。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>id\u003C\u002Fcode> (string): 読み取る入力の識別子。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>指定した入力の最後に知られている値。型は入力定義 (boolean、number、string) によって決まります。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Read the current temperature from an input\u003C\u002Fspan>\n\u003Cspan class=\"variable\">current_temp\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">input::get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"value\"\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Use the value in control logic\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">current_temp\u003C\u002Fspan> \u003Cspan class=\"operator\">&gt;\u003C\u002Fspan> \u003Cspan class=\"number\">25.0\u003C\u002Fspan>) {\n    \u003Cspan class=\"stdlib\">output::set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"cooling\"\u003C\u002Fspan>, \u003Cspan class=\"boolean\">true\u003C\u002Fspan>)\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch2 id=\"chu-li-cao-zuo\">\u003Ca href=\"#chu-li-cao-zuo\" class=\"anchor\">#\u003C\u002Fa> 出力操作\u003C\u002Fh2>\n\u003Cp>このセクションでは、ロジックブロックの出力を制御する関数について説明します。各ブロックは 1 つ以上の出力を定義でき、値を他の接続されたブロックへ伝播できます。\u003C\u002Fp>\n\u003Ch3 id=\"output-get\">\u003Ca href=\"#output-get\" class=\"anchor\">#\u003C\u002Fa> output::get\u003C\u002Fh3>\n\u003Cp>識別子を指定して、特定の出力の現在値を取得します。変更する前に出力の現在状態を読み取るのに便利です。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>id\u003C\u002Fcode> (string): 読み取る出力の識別子。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>指定した出力の現在値。型は出力定義 (boolean、number、string) によって決まります。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Check the current output state before toggling\u003C\u002Fspan>\n\u003Cspan class=\"variable\">prev\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">output\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"output\"\u003C\u002Fspan>)\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">prev\u003C\u002Fspan>) {\n    \u003Cspan class=\"stdlib\">std::print\u003C\u002Fspan>(\u003Cspan class=\"string\">\"Output is currently ON, turning OFF\"\u003C\u002Fspan>)\n}\n\u003Cspan class=\"stdlib\">output::set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"output\"\u003C\u002Fspan>, \u003Cspan class=\"operator\">!\u003C\u002Fspan>\u003Cspan class=\"variable\">prev\u003C\u002Fspan>)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"output-set\">\u003Ca href=\"#output-set\" class=\"anchor\">#\u003C\u002Fa> output::set\u003C\u002Fh3>\n\u003Cp>識別子を指定して、特定の出力の値を設定します。値の型は、その出力に定義された型 (boolean、number、string) と一致している必要があります。出力を設定すると、新しい値が接続されたブロックへ伝播します。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>id\u003C\u002Fcode> (string): 設定する出力の識別子。\u003C\u002Fli>\n\u003Cli>\u003Ccode>value\u003C\u002Fcode>: 代入する新しい値。出力に定義された型と一致している必要があります。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Set a boolean output\u003C\u002Fspan>\n\u003Cspan class=\"stdlib\">output::set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"output\"\u003C\u002Fspan>, \u003Cspan class=\"boolean\">true\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Set a numeric output based on calculation\u003C\u002Fspan>\n\u003Cspan class=\"variable\">midpoint\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">config\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"midpoint\"\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">hysteresis\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">config\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"hysteresis\"\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">value\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">input::get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"value\"\u003C\u002Fspan>)\n\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">value\u003C\u002Fspan> \u003Cspan class=\"operator\">&gt;=\u003C\u002Fspan> \u003Cspan class=\"variable\">midpoint\u003C\u002Fspan> \u003Cspan class=\"operator\">+\u003C\u002Fspan> \u003Cspan class=\"variable\">hysteresis\u003C\u002Fspan>) {\n    \u003Cspan class=\"stdlib\">output::set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"output\"\u003C\u002Fspan>, \u003Cspan class=\"boolean\">true\u003C\u002Fspan>)\n} \u003Cspan class=\"keyword\">else\u003C\u002Fspan> \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">value\u003C\u002Fspan> \u003Cspan class=\"operator\">&lt;=\u003C\u002Fspan> \u003Cspan class=\"variable\">midpoint\u003C\u002Fspan> \u003Cspan class=\"operator\">-\u003C\u002Fspan> \u003Cspan class=\"variable\">hysteresis\u003C\u002Fspan>) {\n    \u003Cspan class=\"stdlib\">output::set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"output\"\u003C\u002Fspan>, \u003Cspan class=\"boolean\">false\u003C\u002Fspan>)\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"output-toggle\">\u003Ca href=\"#output-toggle\" class=\"anchor\">#\u003C\u002Fa> output::toggle\u003C\u002Fh3>\n\u003Cp>boolean 型の出力をトグルし、現在値を反転します。出力が現在 \u003Ccode>true\u003C\u002Fcode> なら \u003Ccode>false\u003C\u002Fcode> になり、その逆も同様です。この関数は boolean 型の出力でのみ動作します。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>id\u003C\u002Fcode> (string): トグルする boolean 型出力の識別子。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"variable\">channel\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">input::channel\u003C\u002Fspan>()\n\u003Cspan class=\"variable\">value\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">input::value\u003C\u002Fspan>()\n\n\u003Cspan class=\"comment\">\u002F\u002F Toggle the output on a rising edge of the input\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">channel\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"string\">\"input\"\u003C\u002Fspan>) {\n    \u003Cspan class=\"variable\">last_state\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"last_input_state\"\u003C\u002Fspan>)\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">value\u003C\u002Fspan> \u003Cspan class=\"keyword\">and\u003C\u002Fspan> \u003Cspan class=\"operator\">!\u003C\u002Fspan>\u003Cspan class=\"variable\">last_state\u003C\u002Fspan>) {\n        \u003Cspan class=\"variable\">output\u003C\u002Fspan>::\u003Cspan class=\"function\">toggle\u003C\u002Fspan>(\u003Cspan class=\"string\">\"output\"\u003C\u002Fspan>)\n    }\n    \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"last_input_state\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">value\u003C\u002Fspan>)\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch2 id=\"zhuang-tai-cao-zuo\">\u003Ca href=\"#zhuang-tai-cao-zuo\" class=\"anchor\">#\u003C\u002Fa> 状態操作\u003C\u002Fh2>\n\u003Cp>このセクションでは、ロジックブロック内の永続状態を管理する関数について説明します。状態変数はスクリプト実行の間も値を保持するため、エッジ検出、カウンタ、タイミング情報など、時間経過に伴う条件の追跡に欠かせません。利用可能な状態変数とその型はブロック記述子で定義されます。\u003C\u002Fp>\n\u003Ch3 id=\"state-get\">\u003Ca href=\"#state-get\" class=\"anchor\">#\u003C\u002Fa> state::get\u003C\u002Fh3>\n\u003Cp>識別子を指定して、永続状態変数の現在値を取得します。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>id\u003C\u002Fcode> (string): 読み取る状態変数の識別子。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>状態変数の現在値。型は状態変数定義 (boolean、number、string、array) によって決まります。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>array 型の状態変数では、返されるハンドルはコピーではなく、状態に保存された配列を指します。そのハンドル経由での変更 (\u003Ccode>array::append\u003C\u002Fcode> や \u003Ccode>array::clear\u003C\u002Fcode> など) は状態を直接更新するため、後から \u003Ccode>state::set\u003C\u002Fcode> を呼ぶ必要はありません。array 型の状態変数は常に空の配列から始まります。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Use state to detect a rising edge (transition from false to true)\u003C\u002Fspan>\n\u003Cspan class=\"variable\">value\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">input::value\u003C\u002Fspan>()\n\u003Cspan class=\"variable\">last_state\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"last_input_state\"\u003C\u002Fspan>)\n\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">value\u003C\u002Fspan> \u003Cspan class=\"keyword\">and\u003C\u002Fspan> \u003Cspan class=\"operator\">!\u003C\u002Fspan>\u003Cspan class=\"variable\">last_state\u003C\u002Fspan>) {\n    \u003Cspan class=\"comment\">\u002F\u002F Rising edge detected - take action\u003C\u002Fspan>\n    \u003Cspan class=\"variable\">output\u003C\u002Fspan>::\u003Cspan class=\"function\">toggle\u003C\u002Fspan>(\u003Cspan class=\"string\">\"output\"\u003C\u002Fspan>)\n}\n\n\u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"last_input_state\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">value\u003C\u002Fspan>)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"state-set\">\u003Ca href=\"#state-set\" class=\"anchor\">#\u003C\u002Fa> state::set\u003C\u002Fh3>\n\u003Cp>識別子を指定して、永続状態変数に値を保存します。値はスクリプト実行の間も保持されるため、ブロックは複数の入力イベントにまたがって情報を記憶できます。値の型は、その状態変数に定義された型と一致している必要があります。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>id\u003C\u002Fcode> (string): 更新する状態変数の識別子。\u003C\u002Fli>\n\u003Cli>\u003Ccode>value\u003C\u002Fcode>: 保存する新しい値。状態変数に定義された型 (boolean、number、string、array) と一致している必要があります。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>保存する値が array の場合、状態はコピーではなく参照を保持します。呼び出し後もスクリプトはハンドル経由で配列を変更でき、次に状態を読むと変更が反映されています。\u003Ccode>state::get\u003C\u002Fcode> はすでに保存された配列への共有ハンドルを返すため、別の配列に置き換えるときだけ \u003Ccode>state::set\u003C\u002Fcode> が必要です。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Track the timestamp of the last input change\u003C\u002Fspan>\n\u003Cspan class=\"variable\">channel\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">input::channel\u003C\u002Fspan>()\n\u003Cspan class=\"variable\">value\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">input::value\u003C\u002Fspan>()\n\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">channel\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"string\">\"input\"\u003C\u002Fspan>) {\n    \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"last_change_time\"\u003C\u002Fspan>, \u003Cspan class=\"stdlib\">time::now\u003C\u002Fspan>())\n\n    \u003Cspan class=\"comment\">\u002F\u002F Calculate how long the input was in its previous state\u003C\u002Fspan>\n    \u003Cspan class=\"variable\">elapsed\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">time::now\u003C\u002Fspan>() \u003Cspan class=\"operator\">-\u003C\u002Fspan> \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"last_change_time\"\u003C\u002Fspan>)\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">elapsed\u003C\u002Fspan> \u003Cspan class=\"operator\">&gt;\u003C\u002Fspan> \u003Cspan class=\"number\">60\u003C\u002Fspan>) {\n        \u003Cspan class=\"stdlib\">std::print\u003C\u002Fspan>(\u003Cspan class=\"string\">\"Input was stable for over a minute\"\u003C\u002Fspan>)\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch2 id=\"she-ding-cao-zuo\">\u003Ca href=\"#she-ding-cao-zuo\" class=\"anchor\">#\u003C\u002Fa> 設定操作\u003C\u002Fh2>\n\u003Cp>このセクションでは、ブロックの設定パラメータを読み取る関数について説明します。設定値は Voldeno Studio でユーザーが設定し、スクリプト内からは読み取り専用です。コードを変更せずにブロックをカスタマイズできます。たとえば、しきい値、遅延、動作モードの設定などです。\u003C\u002Fp>\n\u003Ch3 id=\"config-get\">\u003Ca href=\"#config-get\" class=\"anchor\">#\u003C\u002Fa> config::get\u003C\u002Fh3>\n\u003Cp>識別子を指定して、設定パラメータの値を取得します。設定パラメータはブロック記述子で定義され、値は Voldeno Studio でユーザーが設定します。スクリプトからは読み取りのみ可能で、変更はできません。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>id\u003C\u002Fcode> (string): 読み取る設定パラメータの識別子。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>設定パラメータの値。型はパラメータ定義 (number、string、enum) によって決まります。enum 型パラメータは 0 始まりの数値インデックスを返します。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Read delay configuration in milliseconds\u003C\u002Fspan>\n\u003Cspan class=\"variable\">delay_on_ms\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">config\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"delay_on_ms\"\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">delay_off_ms\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">config\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"delay_off_ms\"\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Use an enum config to select behavior mode\u003C\u002Fspan>\n\u003Cspan class=\"variable\">mode\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">config\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"mode\"\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns 0, 1, 2... based on selected option\u003C\u002Fspan>\n\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">mode\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>) {\n    \u003Cspan class=\"comment\">\u002F\u002F First mode logic\u003C\u002Fspan>\n    ...\n} \u003Cspan class=\"keyword\">else\u003C\u002Fspan> \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">mode\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"number\">1\u003C\u002Fspan>) {\n    \u003Cspan class=\"comment\">\u002F\u002F Second mode logic\u003C\u002Fspan>\n    ...\n}\n\n\u003Cspan class=\"comment\">\u002F\u002F Read a numeric threshold from config\u003C\u002Fspan>\n\u003Cspan class=\"variable\">scale\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">config\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"scale\"\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">offset\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">config\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"offset\"\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">result\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">input::value\u003C\u002Fspan>() \u003Cspan class=\"operator\">*\u003C\u002Fspan> \u003Cspan class=\"variable\">scale\u003C\u002Fspan> \u003Cspan class=\"operator\">+\u003C\u002Fspan> \u003Cspan class=\"variable\">offset\u003C\u002Fspan>\n\u003Cspan class=\"stdlib\">output::set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"value\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">result\u003C\u002Fspan>)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch2 id=\"fei-tong-qi-cao-zuo\">\u003Ca href=\"#fei-tong-qi-cao-zuo\" class=\"anchor\">#\u003C\u002Fa> 非同期操作\u003C\u002Fh2>\n\u003Cp>このセクションでは、関数呼び出しを遅延実行するための関数について説明します。Volang は非ブロッキング言語で、\u003Ccode>sleep\u003C\u002Fcode> 関数は提供されません。代わりにコールバックを使い、指定した遅延後にユーザー定義関数を呼び出すことで、時間ベースのロジックを実現します。\u003C\u002Fp>\n\u003Cp>遅延、時間指定パルス、モーター制御シーケンス、一定時間経過後に動作するロジックなどの実装に欠かせません。コールバックは呼び出し先関数へ引数を渡せ、関数側からさらにコールバックをスケジュールして多段階のシーケンスを作れます。\u003C\u002Fp>\n\u003Cp>ブロックごとに同時に有効にできるコールバックは 1 つだけです。保留中のコールバックがある状態で新しいコールバックをスケジュールするには、先に \u003Ccode>callback::clear()\u003C\u002Fcode> で既存のものを解除する必要があります。\u003C\u002Fp>\n\u003Ch3 id=\"callback-set\">\u003Ca href=\"#callback-set\" class=\"anchor\">#\u003C\u002Fa> callback::set\u003C\u002Fh3>\n\u003Cp>指定した遅延 (ミリ秒) 後に、ユーザー定義の \u003Ccode>extern\u003C\u002Fcode> 関数への遅延呼び出しをスケジュールします。関数は文字列の名前で指定します。追加引数を渡すと、コールバック関数のパラメータとして受け渡されます。\u003C\u002Fp>\n\u003Cp>対象関数はスクリプト内で \u003Ccode>extern fn\u003C\u002Fcode> 構文で宣言する必要があります。遅延が経過すると、システムは指定された引数でその関数を呼び出します。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>delay_ms\u003C\u002Fcode> (integer): 関数が呼び出されるまでの遅延 (ミリ秒)。\u003C\u002Fli>\n\u003Cli>\u003Ccode>function_name\u003C\u002Fcode> (string): 呼び出す \u003Ccode>extern fn\u003C\u002Fcode> の名前。\u003C\u002Fli>\n\u003Cli>\u003Ccode>...args\u003C\u002Fcode> (optional): コールバック関数へ渡す追加引数。任意の型の値を 0 個以上渡せます。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Define a simple callback handler\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">extern\u003C\u002Fspan> \u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">onTimeout\u003C\u002Fspan>() {\n    \u003Cspan class=\"stdlib\">output::set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"output\"\u003C\u002Fspan>, \u003Cspan class=\"boolean\">true\u003C\u002Fspan>)\n}\n\n\u003Cspan class=\"comment\">\u002F\u002F Schedule the callback to fire after a configurable delay\u003C\u002Fspan>\n\u003Cspan class=\"variable\">delay_ms\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">config\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"delay_ms\"\u003C\u002Fspan>)\n\u003Cspan class=\"stdlib\">callback::set\u003C\u002Fspan>(\u003Cspan class=\"variable\">delay_ms\u003C\u002Fspan>, \u003Cspan class=\"string\">\"onTimeout\"\u003C\u002Fspan>)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\n\u003Cp>\u003Cstrong>例 (引数を渡す場合):\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Callback that chains into the next step\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">extern\u003C\u002Fspan> \u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">onSequence\u003C\u002Fspan>(\u003Cspan class=\"variable\">step\u003C\u002Fspan>) {\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">step\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"number\">1\u003C\u002Fspan>) {\n        \u003Cspan class=\"stdlib\">output::set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"output\"\u003C\u002Fspan>, \u003Cspan class=\"boolean\">true\u003C\u002Fspan>)\n        \u003Cspan class=\"comment\">\u002F\u002F Schedule step 2 after a pulse duration\u003C\u002Fspan>\n        \u003Cspan class=\"variable\">pulse_ms\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">config\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"pulse_ms\"\u003C\u002Fspan>)\n        \u003Cspan class=\"stdlib\">callback::set\u003C\u002Fspan>(\u003Cspan class=\"variable\">pulse_ms\u003C\u002Fspan>, \u003Cspan class=\"string\">\"onSequence\"\u003C\u002Fspan>, \u003Cspan class=\"number\">2\u003C\u002Fspan>)\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan>\n    }\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">step\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"number\">2\u003C\u002Fspan>) {\n        \u003Cspan class=\"stdlib\">output::set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"output\"\u003C\u002Fspan>, \u003Cspan class=\"boolean\">false\u003C\u002Fspan>)\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan>\n    }\n}\n\n\u003Cspan class=\"comment\">\u002F\u002F Start the sequence after an initial delay\u003C\u002Fspan>\n\u003Cspan class=\"stdlib\">callback::set\u003C\u002Fspan>(\u003Cspan class=\"number\">1000\u003C\u002Fspan>, \u003Cspan class=\"string\">\"onSequence\"\u003C\u002Fspan>, \u003Cspan class=\"number\">1\u003C\u002Fspan>)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"callback-clear\">\u003Ca href=\"#callback-clear\" class=\"anchor\">#\u003C\u002Fa> callback::clear\u003C\u002Fh3>\n\u003Cp>ブロックに現在スケジュールされているコールバックをすべてキャンセルします。新しいコールバックをスケジュールする前、または保留中の処理が不要になったとき (たとえば、遅延が切れる前に入力が変わった場合) に呼び出します。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"keyword\">extern\u003C\u002Fspan> \u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">onCallback\u003C\u002Fspan>(\u003Cspan class=\"variable\">value\u003C\u002Fspan>) {\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">value\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"number\">1\u003C\u002Fspan>) {\n        \u003Cspan class=\"stdlib\">output::set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"output\"\u003C\u002Fspan>, \u003Cspan class=\"boolean\">true\u003C\u002Fspan>)\n    } \u003Cspan class=\"keyword\">else\u003C\u002Fspan> \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">value\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"number\">2\u003C\u002Fspan>) {\n        \u003Cspan class=\"stdlib\">output::set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"output\"\u003C\u002Fspan>, \u003Cspan class=\"boolean\">false\u003C\u002Fspan>)\n    }\n}\n\n\u003Cspan class=\"variable\">channel\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">input::channel\u003C\u002Fspan>()\n\u003Cspan class=\"variable\">value\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">input::value\u003C\u002Fspan>()\n\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">channel\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"string\">\"input\"\u003C\u002Fspan>) {\n    \u003Cspan class=\"variable\">last\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"last_input_state\"\u003C\u002Fspan>)\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">value\u003C\u002Fspan> \u003Cspan class=\"operator\">!=\u003C\u002Fspan> \u003Cspan class=\"variable\">last\u003C\u002Fspan>) {\n        \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"last_input_state\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">value\u003C\u002Fspan>)\n\n        \u003Cspan class=\"comment\">\u002F\u002F Always clear the previous callback before scheduling a new one\u003C\u002Fspan>\n        \u003Cspan class=\"stdlib\">callback::clear\u003C\u002Fspan>()\n\n        \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">value\u003C\u002Fspan>) {\n            \u003Cspan class=\"variable\">delay_ms\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">config\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"delay_on_ms\"\u003C\u002Fspan>)\n            \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">delay_ms\u003C\u002Fspan> \u003Cspan class=\"operator\">&gt;\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>) {\n                \u003Cspan class=\"stdlib\">callback::set\u003C\u002Fspan>(\u003Cspan class=\"variable\">delay_ms\u003C\u002Fspan>, \u003Cspan class=\"string\">\"onCallback\"\u003C\u002Fspan>, \u003Cspan class=\"number\">1\u003C\u002Fspan>)\n            } \u003Cspan class=\"keyword\">else\u003C\u002Fspan> {\n                \u003Cspan class=\"stdlib\">output::set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"output\"\u003C\u002Fspan>, \u003Cspan class=\"boolean\">true\u003C\u002Fspan>)\n            }\n        } \u003Cspan class=\"keyword\">else\u003C\u002Fspan> {\n            \u003Cspan class=\"variable\">delay_ms\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">config\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"delay_off_ms\"\u003C\u002Fspan>)\n            \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">delay_ms\u003C\u002Fspan> \u003Cspan class=\"operator\">&gt;\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>) {\n                \u003Cspan class=\"stdlib\">callback::set\u003C\u002Fspan>(\u003Cspan class=\"variable\">delay_ms\u003C\u002Fspan>, \u003Cspan class=\"string\">\"onCallback\"\u003C\u002Fspan>, \u003Cspan class=\"number\">2\u003C\u002Fspan>)\n            } \u003Cspan class=\"keyword\">else\u003C\u002Fspan> {\n                \u003Cspan class=\"stdlib\">output::set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"output\"\u003C\u002Fspan>, \u003Cspan class=\"boolean\">false\u003C\u002Fspan>)\n            }\n        }\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch2 id=\"wen-zi-lie-cao-zuo\">\u003Ca href=\"#wen-zi-lie-cao-zuo\" class=\"anchor\">#\u003C\u002Fa> 文字列操作\u003C\u002Fh2>\n\u003Cp>このセクションでは、文字列を操作する関数について説明します。\u003C\u002Fp>\n\u003Ch3 id=\"str-len\">\u003Ca href=\"#str-len\" class=\"anchor\">#\u003C\u002Fa> str::len\u003C\u002Fh3>\n\u003Cp>指定した文字列の文字数を計算します。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>text\u003C\u002Fcode> (string): 計測対象の入力文字列。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>文字列内の文字数を表す整数値。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Check if the user PIN code has the required length\u003C\u002Fspan>\n\u003Cspan class=\"variable\">user_pin\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"string\">\"1234\"\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"stdlib\">str::len\u003C\u002Fspan>(\u003Cspan class=\"variable\">user_pin\u003C\u002Fspan>) \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"number\">4\u003C\u002Fspan>) {\n    ...\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"str-trim\">\u003Ca href=\"#str-trim\" class=\"anchor\">#\u003C\u002Fa> str::trim\u003C\u002Fh3>\n\u003Cp>文字列の先頭と末尾にある空白文字 (スペース、タブ、改行) をすべて削除します。外部システムから受け取ったコマンドの解析や、余分な空白が混ざるユーザー入力の整理に欠かせません。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>text\u003C\u002Fcode> (string): トリム対象の入力文字列。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>前後の空白を除いた新しい文字列。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Clean up a command received from an external module\u003C\u002Fspan>\n\u003Cspan class=\"variable\">input\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"string\">\"  START  \"\u003C\u002Fspan>\n\u003Cspan class=\"variable\">command\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">str::trim\u003C\u002Fspan>(\u003Cspan class=\"variable\">input\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Now the string is \"START\" and can be compared safely\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">command\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"string\">\"START\"\u003C\u002Fspan>) {\n    ....\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"str-concat\">\u003Ca href=\"#str-concat\" class=\"anchor\">#\u003C\u002Fa> str::concat\u003C\u002Fh3>\n\u003Cp>2 つ以上の文字列を連結して 1 つの文字列にします。この関数は可変長引数で、任意個の引数を受け取れるため、複雑なメッセージやコマンドを動的に組み立てられます。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>...strings\u003C\u002Fcode>: 連結する文字列引数の列。必要な数だけカンマ区切りで渡せます。引数が 1 つだけの場合は、その引数自体を返します。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>すべての入力文字列を順に連結した新しい文字列。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"variable\">room\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"string\">\"Living Room\"\u003C\u002Fspan>\n\u003Cspan class=\"variable\">temp\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"string\">\"22.5\"\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Construct a full status message using multiple arguments\u003C\u002Fspan>\n\u003Cspan class=\"variable\">message\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">str::concat\u003C\u002Fspan>(\u003Cspan class=\"string\">\"Status: \"\u003C\u002Fspan>, \u003Cspan class=\"variable\">room\u003C\u002Fspan>, \u003Cspan class=\"string\">\" is currently \"\u003C\u002Fspan>, \u003Cspan class=\"variable\">temp\u003C\u002Fspan>, \u003Cspan class=\"string\">\"°C\"\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Result: \"Status: Living Room is currently 22.5°C\"\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"str-count\">\u003Ca href=\"#str-count\" class=\"anchor\">#\u003C\u002Fa> str::count\u003C\u002Fh3>\n\u003Cp>文字列内で部分文字列が重ならずに出現する回数を数えます。\u003Ccode>start\u003C\u002Fcode> と \u003Ccode>end\u003C\u002Fcode> 引数で、文字列内の特定範囲に検索を限定することもできます。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>text\u003C\u002Fcode> (string): 検索対象の文字列。\u003C\u002Fli>\n\u003Cli>\u003Ccode>substring\u003C\u002Fcode> (string): 出現回数を数える部分文字列。\u003C\u002Fli>\n\u003Cli>\u003Ccode>start\u003C\u002Fcode> (integer, optional): 検索を開始する位置。既定値は \u003Ccode>0\u003C\u002Fcode>。\u003C\u002Fli>\n\u003Cli>\u003Ccode>end\u003C\u002Fcode> (integer, optional): 検索を終了する位置 (この位置は含まない)。既定値は文字列の末尾。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>部分文字列の重ならない出現回数を表す整数値。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Count all occurrences of a word\u003C\u002Fspan>\n\u003Cspan class=\"variable\">text\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"string\">\"I love apples, apple are my favorite fruit\"\u003C\u002Fspan>\n\u003Cspan class=\"variable\">count\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"module\">str\u003C\u002Fspan>::\u003Cspan class=\"function\">count\u003C\u002Fspan>(\u003Cspan class=\"variable\">text\u003C\u002Fspan>, \u003Cspan class=\"string\">\"apple\"\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns 2\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Count occurrences within a range\u003C\u002Fspan>\n\u003Cspan class=\"variable\">data\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"string\">\"abcabcabc\"\u003C\u002Fspan>\n\u003Cspan class=\"variable\">count\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"module\">str\u003C\u002Fspan>::\u003Cspan class=\"function\">count\u003C\u002Fspan>(\u003Cspan class=\"variable\">data\u003C\u002Fspan>, \u003Cspan class=\"string\">\"abc\"\u003C\u002Fspan>, \u003Cspan class=\"number\">1\u003C\u002Fspan>)    \u003Cspan class=\"comment\">\u002F\u002F Returns 2 (skips first \"abc\")\u003C\u002Fspan>\n\u003Cspan class=\"variable\">count\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"module\">str\u003C\u002Fspan>::\u003Cspan class=\"function\">count\u003C\u002Fspan>(\u003Cspan class=\"variable\">data\u003C\u002Fspan>, \u003Cspan class=\"string\">\"abc\"\u003C\u002Fspan>, \u003Cspan class=\"number\">1\u003C\u002Fspan>, \u003Cspan class=\"number\">7\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns 1\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Empty substring returns length + 1\u003C\u002Fspan>\n\u003Cspan class=\"variable\">count\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"module\">str\u003C\u002Fspan>::\u003Cspan class=\"function\">count\u003C\u002Fspan>(\u003Cspan class=\"string\">\"hello\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"\"\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns 6\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Non-overlapping: \"aaaa\" contains 2 non-overlapping \"aa\"\u003C\u002Fspan>\n\u003Cspan class=\"variable\">count\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"module\">str\u003C\u002Fspan>::\u003Cspan class=\"function\">count\u003C\u002Fspan>(\u003Cspan class=\"string\">\"aaaa\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"aa\"\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns 2\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"str-replace\">\u003Ca href=\"#str-replace\" class=\"anchor\">#\u003C\u002Fa> str::replace\u003C\u002Fh3>\n\u003Cp>文字列内の部分文字列を新しい部分文字列に置き換えます。既定ではすべての出現箇所を置き換えます。オプションの \u003Ccode>count\u003C\u002Fcode> パラメータで、左から右への置換回数を制限できます。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>text\u003C\u002Fcode> (string): 元の文字列。\u003C\u002Fli>\n\u003Cli>\u003Ccode>old\u003C\u002Fcode> (string): 置き換え対象の部分文字列。\u003C\u002Fli>\n\u003Cli>\u003Ccode>new\u003C\u002Fcode> (string): 置き換え後の部分文字列。\u003C\u002Fli>\n\u003Cli>\u003Ccode>count\u003C\u002Fcode> (integer, optional): 最大置換回数。省略するとすべての出現箇所を置き換えます。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>置換を適用した新しい文字列。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Replace all occurrences\u003C\u002Fspan>\n\u003Cspan class=\"variable\">result\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"module\">str\u003C\u002Fspan>::\u003Cspan class=\"function\">replace\u003C\u002Fspan>(\u003Cspan class=\"string\">\"one one was a horse\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"one\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"three\"\u003C\u002Fspan>)\n\u003Cspan class=\"comment\">\u002F\u002F Returns \"three three was a horse\"\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Replace only the first occurrence\u003C\u002Fspan>\n\u003Cspan class=\"variable\">result\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"module\">str\u003C\u002Fspan>::\u003Cspan class=\"function\">replace\u003C\u002Fspan>(\u003Cspan class=\"string\">\"one one was a horse\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"one\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"three\"\u003C\u002Fspan>, \u003Cspan class=\"number\">1\u003C\u002Fspan>)\n\u003Cspan class=\"comment\">\u002F\u002F Returns \"three one was a horse\"\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Delete by replacing with empty string\u003C\u002Fspan>\n\u003Cspan class=\"variable\">result\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"module\">str\u003C\u002Fspan>::\u003Cspan class=\"function\">replace\u003C\u002Fspan>(\u003Cspan class=\"string\">\"hello\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"l\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"\"\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns \"heo\"\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Empty old string inserts between every character\u003C\u002Fspan>\n\u003Cspan class=\"variable\">result\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"module\">str\u003C\u002Fspan>::\u003Cspan class=\"function\">replace\u003C\u002Fspan>(\u003Cspan class=\"string\">\"abc\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"-\"\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns \"-a-b-c-\"\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"str-number\">\u003Ca href=\"#str-number\" class=\"anchor\">#\u003C\u002Fa> str::number\u003C\u002Fh3>\n\u003Cp>文字列引数を解析して数値に変換します。文字列に小数点が含まれる場合は float、そうでなければ integer を返します。形式は自動判定されます。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>text\u003C\u002Fcode>: 数値表現を含む文字列。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>入力形式に応じた整数または float の数値。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Case 1: Parsing an integer (e.g., brightness level)\u003C\u002Fspan>\n\u003Cspan class=\"variable\">brightness\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">str::number\u003C\u002Fspan>(\u003Cspan class=\"string\">\"80\"\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns Integer 80\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Case 2: Parsing a float (e.g., temperature)\u003C\u002Fspan>\n\u003Cspan class=\"variable\">temp_str\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"string\">\"21.5\"\u003C\u002Fspan>\n\u003Cspan class=\"variable\">threshold\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">str::number\u003C\u002Fspan>(\u003Cspan class=\"variable\">temp_str\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns Float 21.5\u003C\u002Fspan>\n\u003Cspan class=\"variable\">current_temp\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"number\">22\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Using the converted value in logic\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">current_temp\u003C\u002Fspan> \u003Cspan class=\"operator\">&gt;\u003C\u002Fspan> \u003Cspan class=\"variable\">threshold\u003C\u002Fspan>) {\n    ...\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"str-fmt\">\u003Ca href=\"#str-fmt\" class=\"anchor\">#\u003C\u002Fa> str::fmt\u003C\u002Fh3>\n\u003Cp>テンプレート文字列内の \u003Ccode>{}\u003C\u002Fcode> プレースホルダーを、渡された引数の文字列表現で置き換えて書式付き文字列を組み立てます。異なる型 (string、数値、boolean) の可変個引数を受け取り、挿入前に自動で文字列へ変換します。置換は位置順です。1 番目の \u003Ccode>{}\u003C\u002Fcode> は 1 番目の引数、2 番目の \u003Ccode>{}\u003C\u002Fcode> は 2 番目の引数、という順序になります。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>template\u003C\u002Fcode>: 波括弧 \u003Ccode>{}\u003C\u002Fcode> プレースホルダーを含む書式文字列。\u003C\u002Fli>\n\u003Cli>\u003Ccode>...args\u003C\u002Fcode>: プレースホルダーへ代入する値の列。数値、文字列、boolean リテラル (\u003Ccode>true\u003C\u002Fcode>\u002F\u003Ccode>false\u003C\u002Fcode>) などに対応します。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>すべてのプレースホルダーを対応する値で置き換えた新しい文字列。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"variable\">sensorName\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"string\">\"Kitchen_Main\"\u003C\u002Fspan>\n\u003Cspan class=\"variable\">temp\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"number\">22.5\u003C\u002Fspan>\n\u003Cspan class=\"variable\">isActive\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"boolean\">true\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Format a complex log message without manual concatenation\u003C\u002Fspan>\n\u003Cspan class=\"variable\">log\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">str::fmt\u003C\u002Fspan>(\u003Cspan class=\"string\">\"Sensor {} status: Active={}, Value={}°C\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">sensorName\u003C\u002Fspan>, \u003Cspan class=\"variable\">isActive\u003C\u002Fspan>, \u003Cspan class=\"variable\">temp\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Result: \"Sensor Kitchen_Main status: Active=true, Value=22.5°C\"\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"str-split\">\u003Ca href=\"#str-split\" class=\"anchor\">#\u003C\u002Fa> str::split\u003C\u002Fh3>\n\u003Cp>文字列分割操作を初期化し、イテレータ状態を作成します。この関数はすぐに分割を実行しません。代わりに、現在位置と文字列走査に必要なロジックを保持する不透明な \u003Ccode>handle\u003C\u002Fcode> オブジェクトを返します。実際の部分文字列を 1 つずつ取得するには、このオブジェクトを \u003Ccode>str::split_next\u003C\u002Fcode> または \u003Ccode>str::split_has_next\u003C\u002Fcode> に渡します。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>text\u003C\u002Fcode>: 分割対象の元文字列。\u003C\u002Fli>\n\u003Cli>\u003Ccode>separator\u003C\u002Fcode>: チャンク間の境界を示す区切り文字列。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>進行中の分割セッションを表す不透明なハンドル。このオブジェクトを直接変更しないでください。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"variable\">rawData\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"string\">\"sensor1;25.5;active\"\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Initialize the splitter. 'iterator' now holds the state.\u003C\u002Fspan>\n\u003Cspan class=\"variable\">iterator\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">str::split\u003C\u002Fspan>(\u003Cspan class=\"variable\">rawData\u003C\u002Fspan>, \u003Cspan class=\"string\">\";\"\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F The iterator is now ready to be consumed by split_next...\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"str-split-has-next\">\u003Ca href=\"#str-split-has-next\" class=\"anchor\">#\u003C\u002Fa> str::split_has_next\u003C\u002Fh3>\n\u003Cp>現在の分割セッションから取得できる部分文字列がまだあるかを確認します。\u003Ccode>str::split\u003C\u002Fcode> が作成した不透明な \u003Ccode>state\u003C\u002Fcode> オブジェクトを調べます。状態を変更したりイテレータ位置を進めたりはせず、利用可否だけを確認します。文字列の各部分を走査する \u003Ccode>while\u003C\u002Fcode> ループの条件としてよく使われます。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>state\u003C\u002Fcode>: \u003Ccode>str::split\u003C\u002Fcode> が返す不透明なハンドル。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>取得可能な部分文字列が 1 つ以上あれば \u003Ccode>true\u003C\u002Fcode>、そうでなければ \u003Ccode>false\u003C\u002Fcode> を返します。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"variable\">data\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"string\">\"RED,GREEN,BLUE\"\u003C\u002Fspan>\n\u003Cspan class=\"variable\">iterator\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">str::split\u003C\u002Fspan>(\u003Cspan class=\"variable\">data\u003C\u002Fspan>, \u003Cspan class=\"string\">\",\"\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Loop as long as there are tokens left\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">while\u003C\u002Fspan> (\u003Cspan class=\"stdlib\">str::split_has_next\u003C\u002Fspan>(\u003Cspan class=\"variable\">iterator\u003C\u002Fspan>)) {\n    ...\n    \u003Cspan class=\"comment\">\u002F\u002F Safe to call split_next() here\u003C\u002Fspan>\n    \u003Cspan class=\"comment\">\u002F\u002F color = str::split_next(iterator) \u003C\u002Fspan>\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"str-split-next\">\u003Ca href=\"#str-split-next\" class=\"anchor\">#\u003C\u002Fa> str::split_next\u003C\u002Fh3>\n\u003Cp>分割シーケンスから次の部分文字列を取り出して返し、イテレータを次の位置へ進めます。不透明な \u003Ccode>state\u003C\u002Fcode> が指す文字列の現在セグメントを消費します。文字列のすべての部分を処理するまで、順に呼び出す想定です。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>state\u003C\u002Fcode>: \u003Ccode>str::split\u003C\u002Fcode> が返す不透明なハンドル。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>元の文字列の次のセグメント。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cblockquote>\n\u003Cp>\u003Cstrong>注意:\u003C\u002Fstrong> 安全に反復するには、この関数を呼ぶ前に \u003Ccode>str::split_has_next(state)\u003C\u002Fcode> で取得可能か確認することを推奨します。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Scenario: Parsing a command string \"SET_COLOR;255;0;0\"\u003C\u002Fspan>\n\u003Cspan class=\"variable\">commandRaw\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"string\">\"SET_COLOR;255;0;0\"\u003C\u002Fspan>\n\u003Cspan class=\"variable\">iter\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">str::split\u003C\u002Fspan>(\u003Cspan class=\"variable\">commandRaw\u003C\u002Fspan>, \u003Cspan class=\"string\">\";\"\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F We know the format, so we can extract parts manually\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"stdlib\">str::split_has_next\u003C\u002Fspan>(\u003Cspan class=\"variable\">iter\u003C\u002Fspan>)) {\n    \u003Cspan class=\"variable\">cmd\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">str::split_next\u003C\u002Fspan>(\u003Cspan class=\"variable\">iter\u003C\u002Fspan>)   \u003Cspan class=\"comment\">\u002F\u002F \"SET_COLOR\"\u003C\u002Fspan>\n    \u003Cspan class=\"variable\">r\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">str::split_next\u003C\u002Fspan>(\u003Cspan class=\"variable\">iter\u003C\u002Fspan>)     \u003Cspan class=\"comment\">\u002F\u002F \"255\"\u003C\u002Fspan>\n    \u003Cspan class=\"variable\">g\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">str::split_next\u003C\u002Fspan>(\u003Cspan class=\"variable\">iter\u003C\u002Fspan>)     \u003Cspan class=\"comment\">\u002F\u002F \"0\"\u003C\u002Fspan>\n    \u003Cspan class=\"variable\">b\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">str::split_next\u003C\u002Fspan>(\u003Cspan class=\"variable\">iter\u003C\u002Fspan>)     \u003Cspan class=\"comment\">\u002F\u002F \"0\"\u003C\u002Fspan>\n    ...\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch2 id=\"pei-lie-cao-zuo\">\u003Ca href=\"#pei-lie-cao-zuo\" class=\"anchor\">#\u003C\u002Fa> 配列操作\u003C\u002Fh2>\n\u003Cp>このセクションでは、配列を作成・操作する関数について説明します。\u003C\u002Fp>\n\u003Ch3 id=\"array-new\">\u003Ca href=\"#array-new\" class=\"anchor\">#\u003C\u002Fa> array::new\u003C\u002Fh3>\n\u003Cp>渡された値で初期化した新しい配列を作成します。この関数は可変長引数で、任意の型の値を任意個受け取れます。引数なしで呼ぶと空の配列を作成します。配列は混合型を保持でき、他の配列関数でサイズを動的に変更できます。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>...values\u003C\u002Fcode> (optional): 配列を初期化する値の列。任意の型 (数値、文字列、boolean、その他の配列) の引数を 0 個以上渡せます。引数がなければ空の配列を作成します。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>作成された配列を表す不透明なハンドル。配列内容を操作するには、\u003Ccode>array::put_at\u003C\u002Fcode>、\u003Ccode>array::get_at\u003C\u002Fcode>、\u003Ccode>array::len\u003C\u002Fcode> などの他の配列関数へ渡します。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Create an empty array\u003C\u002Fspan>\n\u003Cspan class=\"variable\">empty\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::new\u003C\u002Fspan>()\n\n\u003Cspan class=\"comment\">\u002F\u002F Create an array with initial numeric values\u003C\u002Fspan>\n\u003Cspan class=\"variable\">temperatures\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::new\u003C\u002Fspan>(\u003Cspan class=\"number\">21.5\u003C\u002Fspan>, \u003Cspan class=\"number\">22.0\u003C\u002Fspan>, \u003Cspan class=\"number\">19.8\u003C\u002Fspan>, \u003Cspan class=\"number\">23.1\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Create an array with mixed types\u003C\u002Fspan>\n\u003Cspan class=\"variable\">config\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::new\u003C\u002Fspan>(\u003Cspan class=\"string\">\"sensor1\"\u003C\u002Fspan>, \u003Cspan class=\"number\">100\u003C\u002Fspan>, \u003Cspan class=\"boolean\">true\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Create an array with string values for room names\u003C\u002Fspan>\n\u003Cspan class=\"variable\">rooms\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::new\u003C\u002Fspan>(\u003Cspan class=\"string\">\"Living Room\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"Kitchen\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"Bedroom\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"Bathroom\"\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Arrays can be used to collect sensor readings over time\u003C\u002Fspan>\n\u003Cspan class=\"variable\">readings\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::new\u003C\u002Fspan>()\n\u003Cspan class=\"comment\">\u002F\u002F Later: array::push(readings, current_value)\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"array-len\">\u003Ca href=\"#array-len\" class=\"anchor\">#\u003C\u002Fa> array::len\u003C\u002Fh3>\n\u003Cp>配列に現在格納されている要素数を返します。配列が空かどうかの確認、全要素の走査、特定インデックスへアクセスする前のサイズ検証に便利です。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>arr\u003C\u002Fcode>: \u003Ccode>array::new\u003C\u002Fcode> が返す不透明な配列ハンドル。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>配列内の要素数を表す整数値。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Check the size of an array\u003C\u002Fspan>\n\u003Cspan class=\"variable\">temps\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::new\u003C\u002Fspan>(\u003Cspan class=\"number\">21.5\u003C\u002Fspan>, \u003Cspan class=\"number\">22.0\u003C\u002Fspan>, \u003Cspan class=\"number\">19.8\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">count\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::len\u003C\u002Fspan>(\u003Cspan class=\"variable\">temps\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns 3\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Check if an array is empty\u003C\u002Fspan>\n\u003Cspan class=\"variable\">data\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::new\u003C\u002Fspan>()\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"stdlib\">array::len\u003C\u002Fspan>(\u003Cspan class=\"variable\">data\u003C\u002Fspan>) \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>) {\n    \u003Cspan class=\"stdlib\">std::print\u003C\u002Fspan>(\u003Cspan class=\"string\">\"No data collected yet\"\u003C\u002Fspan>)\n}\n\n\u003Cspan class=\"comment\">\u002F\u002F Use length for iteration bounds\u003C\u002Fspan>\n\u003Cspan class=\"variable\">sensors\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::new\u003C\u002Fspan>(\u003Cspan class=\"string\">\"temp1\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"temp2\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"humidity\"\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">while\u003C\u002Fspan> (\u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">&lt;\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::len\u003C\u002Fspan>(\u003Cspan class=\"variable\">sensors\u003C\u002Fspan>)) {\n    \u003Cspan class=\"comment\">\u002F\u002F Process each sensor...\u003C\u002Fspan>\n    \u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">+\u003C\u002Fspan> \u003Cspan class=\"number\">1\u003C\u002Fspan>\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"array-get-at\">\u003Ca href=\"#array-get-at\" class=\"anchor\">#\u003C\u002Fa> array::get_at\u003C\u002Fh3>\n\u003Cp>配列の指定インデックスに格納されている値を取得します。配列インデックスは 0 始まりで、最初の要素はインデックス \u003Ccode>0\u003C\u002Fcode>、2 番目は \u003Ccode>1\u003C\u002Fcode>、という順序です。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>arr\u003C\u002Fcode>: \u003Ccode>array::new\u003C\u002Fcode> が返す不透明な配列ハンドル。\u003C\u002Fli>\n\u003Cli>\u003Ccode>index\u003C\u002Fcode>: 取得する要素の 0 始まり位置。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>指定インデックスに格納されている値。戻り値の型はその位置に保存された値によって決まります。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cblockquote>\n\u003Cp>\u003Cstrong>警告:\u003C\u002Fstrong> この関数を呼ぶ前に、インデックスが有効範囲内 (\u003Ccode>0 &lt;= index &lt; array::len(arr)\u003C\u002Fcode>) であることを確認してください。存在しないインデックスへアクセスすると \u003Cstrong>プログラム実行エラー\u003C\u002Fstrong> となり、未定義の動作につながる可能性があります。必ず先に \u003Ccode>array::len()\u003C\u002Fcode> でインデックスを検証してください。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"variable\">temps\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::new\u003C\u002Fspan>(\u003Cspan class=\"number\">21.5\u003C\u002Fspan>, \u003Cspan class=\"number\">22.0\u003C\u002Fspan>, \u003Cspan class=\"number\">19.8\u003C\u002Fspan>, \u003Cspan class=\"number\">23.1\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Safe access: check bounds first\u003C\u002Fspan>\n\u003Cspan class=\"variable\">index\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"number\">2\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">index\u003C\u002Fspan> \u003Cspan class=\"operator\">&lt;\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::len\u003C\u002Fspan>(\u003Cspan class=\"variable\">temps\u003C\u002Fspan>)) {\n    \u003Cspan class=\"variable\">value\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::get_at\u003C\u002Fspan>(\u003Cspan class=\"variable\">temps\u003C\u002Fspan>, \u003Cspan class=\"variable\">index\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns 19.8\u003C\u002Fspan>\n    \u003Cspan class=\"stdlib\">std::print\u003C\u002Fspan>(\u003Cspan class=\"stdlib\">str::fmt\u003C\u002Fspan>(\u003Cspan class=\"string\">\"Temperature at index {}: {}°C\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">index\u003C\u002Fspan>, \u003Cspan class=\"variable\">value\u003C\u002Fspan>))\n}\n\n\u003Cspan class=\"comment\">\u002F\u002F Iterate safely over all elements\u003C\u002Fspan>\n\u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">while\u003C\u002Fspan> (\u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">&lt;\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::len\u003C\u002Fspan>(\u003Cspan class=\"variable\">temps\u003C\u002Fspan>)) {\n    \u003Cspan class=\"variable\">temp\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::get_at\u003C\u002Fspan>(\u003Cspan class=\"variable\">temps\u003C\u002Fspan>, \u003Cspan class=\"variable\">i\u003C\u002Fspan>)\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">temp\u003C\u002Fspan> \u003Cspan class=\"operator\">&gt;\u003C\u002Fspan> \u003Cspan class=\"number\">22.0\u003C\u002Fspan>) {\n        \u003Cspan class=\"stdlib\">std::print\u003C\u002Fspan>(\u003Cspan class=\"stdlib\">str::fmt\u003C\u002Fspan>(\u003Cspan class=\"string\">\"High temperature detected: {}°C\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">temp\u003C\u002Fspan>))\n    }\n    \u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">+\u003C\u002Fspan> \u003Cspan class=\"number\">1\u003C\u002Fspan>\n}\n\n\u003Cspan class=\"comment\">\u002F\u002F DANGEROUS: Never do this without bounds checking!\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F value = array::get_at(temps, 10) \u002F\u002F Undefined behavior - may crash!\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"array-put-at\">\u003Ca href=\"#array-put-at\" class=\"anchor\">#\u003C\u002Fa> array::put_at\u003C\u002Fh3>\n\u003Cp>配列の指定インデックスに値を保存し、その位置の既存値を置き換えます。配列インデックスは 0 始まりで、最初の要素はインデックス \u003Ccode>0\u003C\u002Fcode>、2 番目は \u003Ccode>1\u003C\u002Fcode>、という順序です。この関数は配列をその場で変更し、戻り値はありません。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>arr\u003C\u002Fcode>: \u003Ccode>array::new\u003C\u002Fcode> が返す不透明な配列ハンドル。\u003C\u002Fli>\n\u003Cli>\u003Ccode>index\u003C\u002Fcode>: 値を保存する 0 始まり位置。\u003C\u002Fli>\n\u003Cli>\u003Ccode>value\u003C\u002Fcode>: 指定インデックスに保存する値。値の型は、その位置にすでに格納されている要素の型と一致している必要があります。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cblockquote>\n\u003Cp>\u003Cstrong>警告:\u003C\u002Fstrong> この関数を呼ぶ前に、インデックスが有効範囲内 (\u003Ccode>0 &lt;= index &lt; array::len(arr)\u003C\u002Fcode>) であることを確認してください。存在しないインデックスへ書き込もうとすると \u003Cstrong>プログラム実行エラー\u003C\u002Fstrong> となり、未定義の動作につながる可能性があります。必ず先に \u003Ccode>array::len()\u003C\u002Fcode> でインデックスを検証してください。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Create an array with initial values\u003C\u002Fspan>\n\u003Cspan class=\"variable\">temps\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::new\u003C\u002Fspan>(\u003Cspan class=\"number\">21.5\u003C\u002Fspan>, \u003Cspan class=\"number\">22.0\u003C\u002Fspan>, \u003Cspan class=\"number\">19.8\u003C\u002Fspan>, \u003Cspan class=\"number\">23.1\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Safe update: check bounds first\u003C\u002Fspan>\n\u003Cspan class=\"variable\">index\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"number\">1\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">index\u003C\u002Fspan> \u003Cspan class=\"operator\">&lt;\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::len\u003C\u002Fspan>(\u003Cspan class=\"variable\">temps\u003C\u002Fspan>)) {\n    \u003Cspan class=\"stdlib\">array::put_at\u003C\u002Fspan>(\u003Cspan class=\"variable\">temps\u003C\u002Fspan>, \u003Cspan class=\"variable\">index\u003C\u002Fspan>, \u003Cspan class=\"number\">25.0\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Replace 22.0 with 25.0\u003C\u002Fspan>\n}\n\n\u003Cspan class=\"comment\">\u002F\u002F Update all values in a loop\u003C\u002Fspan>\n\u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">while\u003C\u002Fspan> (\u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">&lt;\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::len\u003C\u002Fspan>(\u003Cspan class=\"variable\">temps\u003C\u002Fspan>)) {\n    \u003Cspan class=\"variable\">current\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::get_at\u003C\u002Fspan>(\u003Cspan class=\"variable\">temps\u003C\u002Fspan>, \u003Cspan class=\"variable\">i\u003C\u002Fspan>)\n    \u003Cspan class=\"comment\">\u002F\u002F Apply a correction factor\u003C\u002Fspan>\n    \u003Cspan class=\"stdlib\">array::put_at\u003C\u002Fspan>(\u003Cspan class=\"variable\">temps\u003C\u002Fspan>, \u003Cspan class=\"variable\">i\u003C\u002Fspan>, \u003Cspan class=\"variable\">current\u003C\u002Fspan> \u003Cspan class=\"operator\">+\u003C\u002Fspan> \u003Cspan class=\"number\">0.5\u003C\u002Fspan>)\n    \u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">+\u003C\u002Fspan> \u003Cspan class=\"number\">1\u003C\u002Fspan>\n}\n\n\u003Cspan class=\"comment\">\u002F\u002F Update specific elements in an array of strings\u003C\u002Fspan>\n\u003Cspan class=\"variable\">sensors\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::new\u003C\u002Fspan>(\u003Cspan class=\"string\">\"sensor1\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"sensor2\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"sensor3\"\u003C\u002Fspan>)\n\u003Cspan class=\"stdlib\">array::put_at\u003C\u002Fspan>(\u003Cspan class=\"variable\">sensors\u003C\u002Fspan>, \u003Cspan class=\"number\">0\u003C\u002Fspan>, \u003Cspan class=\"string\">\"temp1\"\u003C\u002Fspan>)\n\u003Cspan class=\"stdlib\">array::put_at\u003C\u002Fspan>(\u003Cspan class=\"variable\">sensors\u003C\u002Fspan>, \u003Cspan class=\"number\">1\u003C\u002Fspan>, \u003Cspan class=\"string\">\"temp2\"\u003C\u002Fspan>)\n\u003Cspan class=\"stdlib\">array::put_at\u003C\u002Fspan>(\u003Cspan class=\"variable\">sensors\u003C\u002Fspan>, \u003Cspan class=\"number\">2\u003C\u002Fspan>, \u003Cspan class=\"string\">\"humidity\"\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F DANGEROUS: Never do this without bounds checking!\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F array::put_at(temps, 10, 99.9) \u002F\u002F Undefined behavior - may crash!\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"array-append\">\u003Ca href=\"#array-append\" class=\"anchor\">#\u003C\u002Fa> array::append\u003C\u002Fh3>\n\u003Cp>配列の末尾に値を追加し、サイズを 1 増やします。最終サイズが事前に分からない場合に、配列を動的に組み立てるのに便利です。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>arr\u003C\u002Fcode>: \u003Ccode>array::new\u003C\u002Fcode> が返す不透明な配列ハンドル。\u003C\u002Fli>\n\u003Cli>\u003Ccode>value\u003C\u002Fcode>: 配列末尾に追加する値。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Build an array dynamically by appending values\u003C\u002Fspan>\n\u003Cspan class=\"variable\">temps\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::new\u003C\u002Fspan>(\u003Cspan class=\"number\">21.5\u003C\u002Fspan>)\n\u003Cspan class=\"stdlib\">array::append\u003C\u002Fspan>(\u003Cspan class=\"variable\">temps\u003C\u002Fspan>, \u003Cspan class=\"number\">22.0\u003C\u002Fspan>)\n\u003Cspan class=\"stdlib\">array::append\u003C\u002Fspan>(\u003Cspan class=\"variable\">temps\u003C\u002Fspan>, \u003Cspan class=\"number\">19.8\u003C\u002Fspan>)\n\u003Cspan class=\"stdlib\">array::append\u003C\u002Fspan>(\u003Cspan class=\"variable\">temps\u003C\u002Fspan>, \u003Cspan class=\"number\">23.1\u003C\u002Fspan>)\n\u003Cspan class=\"comment\">\u002F\u002F temps now contains: [21.5, 22.0, 19.8, 23.1]\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Collect sensor readings over time\u003C\u002Fspan>\n\u003Cspan class=\"variable\">readings\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::new\u003C\u002Fspan>(\u003Cspan class=\"number\">0.0\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Initialize with first reading\u003C\u002Fspan>\n\u003Cspan class=\"stdlib\">array::append\u003C\u002Fspan>(\u003Cspan class=\"variable\">readings\u003C\u002Fspan>, \u003Cspan class=\"number\">0.5\u003C\u002Fspan>)\n\u003Cspan class=\"stdlib\">array::append\u003C\u002Fspan>(\u003Cspan class=\"variable\">readings\u003C\u002Fspan>, \u003Cspan class=\"number\">1.2\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Check the new size\u003C\u002Fspan>\n\u003Cspan class=\"variable\">count\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::len\u003C\u002Fspan>(\u003Cspan class=\"variable\">readings\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns 3\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Append in a loop (e.g., collecting 5 readings)\u003C\u002Fspan>\n\u003Cspan class=\"variable\">data\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::new\u003C\u002Fspan>(\u003Cspan class=\"number\">100\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">while\u003C\u002Fspan> (\u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">&lt;\u003C\u002Fspan> \u003Cspan class=\"number\">4\u003C\u002Fspan>) {\n    \u003Cspan class=\"stdlib\">array::append\u003C\u002Fspan>(\u003Cspan class=\"variable\">data\u003C\u002Fspan>, \u003Cspan class=\"number\">100\u003C\u002Fspan> \u003Cspan class=\"operator\">+\u003C\u002Fspan> \u003Cspan class=\"variable\">i\u003C\u002Fspan>)\n    \u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">+\u003C\u002Fspan> \u003Cspan class=\"number\">1\u003C\u002Fspan>\n}\n\u003Cspan class=\"comment\">\u002F\u002F data now contains: [100, 100, 101, 102, 103]\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"array-clear\">\u003Ca href=\"#array-clear\" class=\"anchor\">#\u003C\u002Fa> array::clear\u003C\u002Fh3>\n\u003Cp>配列からすべての要素を削除し、空にします。この関数を呼んだ後、\u003Ccode>array::len(arr)\u003C\u002Fcode> は \u003Ccode>0\u003C\u002Fcode> を返します。新しい配列を作らずに既存の配列を再利用するのに便利です。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>arr\u003C\u002Fcode>: \u003Ccode>array::new\u003C\u002Fcode> が返す不透明な配列ハンドル。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Create and populate an array\u003C\u002Fspan>\n\u003Cspan class=\"variable\">temps\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::new\u003C\u002Fspan>(\u003Cspan class=\"number\">21.5\u003C\u002Fspan>, \u003Cspan class=\"number\">22.0\u003C\u002Fspan>, \u003Cspan class=\"number\">19.8\u003C\u002Fspan>, \u003Cspan class=\"number\">23.1\u003C\u002Fspan>)\n\u003Cspan class=\"stdlib\">std::print\u003C\u002Fspan>(\u003Cspan class=\"stdlib\">str::fmt\u003C\u002Fspan>(\u003Cspan class=\"string\">\"Length before clear: {}\"\u003C\u002Fspan>, \u003Cspan class=\"stdlib\">array::len\u003C\u002Fspan>(\u003Cspan class=\"variable\">temps\u003C\u002Fspan>))) \u003Cspan class=\"comment\">\u002F\u002F 4\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Clear all elements\u003C\u002Fspan>\n\u003Cspan class=\"stdlib\">array::clear\u003C\u002Fspan>(\u003Cspan class=\"variable\">temps\u003C\u002Fspan>)\n\u003Cspan class=\"stdlib\">std::print\u003C\u002Fspan>(\u003Cspan class=\"stdlib\">str::fmt\u003C\u002Fspan>(\u003Cspan class=\"string\">\"Length after clear: {}\"\u003C\u002Fspan>, \u003Cspan class=\"stdlib\">array::len\u003C\u002Fspan>(\u003Cspan class=\"variable\">temps\u003C\u002Fspan>))) \u003Cspan class=\"comment\">\u002F\u002F 0\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F The array can be reused\u003C\u002Fspan>\n\u003Cspan class=\"stdlib\">array::append\u003C\u002Fspan>(\u003Cspan class=\"variable\">temps\u003C\u002Fspan>, \u003Cspan class=\"number\">25.0\u003C\u002Fspan>)\n\u003Cspan class=\"stdlib\">array::append\u003C\u002Fspan>(\u003Cspan class=\"variable\">temps\u003C\u002Fspan>, \u003Cspan class=\"number\">26.5\u003C\u002Fspan>)\n\u003Cspan class=\"comment\">\u002F\u002F temps now contains: [25.0, 26.5]\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Useful for periodic data collection - clear old readings\u003C\u002Fspan>\n\u003Cspan class=\"variable\">readings\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::new\u003C\u002Fspan>(\u003Cspan class=\"number\">0.0\u003C\u002Fspan>)\n\u003Cspan class=\"comment\">\u002F\u002F ... collect readings ...\u003C\u002Fspan>\n\u003Cspan class=\"stdlib\">array::append\u003C\u002Fspan>(\u003Cspan class=\"variable\">readings\u003C\u002Fspan>, \u003Cspan class=\"number\">1.5\u003C\u002Fspan>)\n\u003Cspan class=\"stdlib\">array::append\u003C\u002Fspan>(\u003Cspan class=\"variable\">readings\u003C\u002Fspan>, \u003Cspan class=\"number\">2.3\u003C\u002Fspan>)\n\u003Cspan class=\"comment\">\u002F\u002F ... process readings ...\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F Reset for next collection cycle\u003C\u002Fspan>\n\u003Cspan class=\"stdlib\">array::clear\u003C\u002Fspan>(\u003Cspan class=\"variable\">readings\u003C\u002Fspan>)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch2 id=\"matupucao-zuo\">\u003Ca href=\"#matupucao-zuo\" class=\"anchor\">#\u003C\u002Fa> マップ操作\u003C\u002Fh2>\n\u003Cp>このセクションでは、マップ (キーと値の辞書) を作成・操作する関数について説明します。Volang のマップは文字列をキーに使い、任意の型の値を格納できます。\u003C\u002Fp>\n\u003Ch3 id=\"map-new\">\u003Ca href=\"#map-new\" class=\"anchor\">#\u003C\u002Fa> map::new\u003C\u002Fh3>\n\u003Cp>新しい空のマップを作成します。マップはキーが常に文字列であるキーと値のペアの集合です。値は任意の型 (数値、文字列、boolean、配列、その他のマップ) にできます。構造化データ、設定、JSON に似たオブジェクトの表現の保存に便利です。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>作成されたマップを表す不透明なハンドル。マップ内容を操作するには、\u003Ccode>map::set\u003C\u002Fcode>、\u003Ccode>map::get\u003C\u002Fcode>、\u003Ccode>map::contains\u003C\u002Fcode> などの他のマップ関数へ渡します。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Create an empty map\u003C\u002Fspan>\n\u003Cspan class=\"variable\">config\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">map::new\u003C\u002Fspan>()\n\n\u003Cspan class=\"comment\">\u002F\u002F The map is now ready to store key-value pairs\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F map::set(config, \"temperature\", 22.5)\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F map::set(config, \"location\", \"Living Room\")\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Maps are also returned by some functions, e.g., HTTP response headers\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F In http::on_response callback, 'headers' parameter is a map\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"map-len\">\u003Ca href=\"#map-len\" class=\"anchor\">#\u003C\u002Fa> map::len\u003C\u002Fh3>\n\u003Cp>マップに現在格納されているキーと値のペア数を返します。マップが空かどうか、エントリ数を確認するのに便利です。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>map\u003C\u002Fcode>: \u003Ccode>map::new\u003C\u002Fcode> が返す不透明なマップハンドル。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>マップ内のキーと値のペア数を表す整数値。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"variable\">config\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">map::new\u003C\u002Fspan>()\n\n\u003Cspan class=\"comment\">\u002F\u002F Check the size of an empty map\u003C\u002Fspan>\n\u003Cspan class=\"variable\">count\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">map::len\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns 0\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F After adding elements, the count increases\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F map::set(config, \"temperature\", 22.5)\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F map::set(config, \"humidity\", 45)\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F count = map::len(config) \u002F\u002F Returns 2\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Check if a map is empty\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"stdlib\">map::len\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>) \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>) {\n    \u003Cspan class=\"stdlib\">std::print\u003C\u002Fspan>(\u003Cspan class=\"string\">\"Map is empty\"\u003C\u002Fspan>)\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"map-set\">\u003Ca href=\"#map-set\" class=\"anchor\">#\u003C\u002Fa> map::set\u003C\u002Fh3>\n\u003Cp>マップ内の指定キーに対する値を追加または更新します。キーが存在しない場合は新しいキーと値のペアを作成します。キーがすでに存在する場合は値を置き換えますが、新しい値は既存値と同じ型である必要があります。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>map\u003C\u002Fcode>: \u003Ccode>map::new\u003C\u002Fcode> が返す不透明なマップハンドル。\u003C\u002Fli>\n\u003Cli>\u003Ccode>key\u003C\u002Fcode>: キー名を指定する文字列。\u003C\u002Fli>\n\u003Cli>\u003Ccode>value\u003C\u002Fcode>: 保存する値。任意の型 (number、string、boolean、array、その他のマップ) にできます。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"variable\">config\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">map::new\u003C\u002Fspan>()\n\n\u003Cspan class=\"comment\">\u002F\u002F Add new key-value pairs\u003C\u002Fspan>\n\u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>, \u003Cspan class=\"string\">\"temperature\"\u003C\u002Fspan>, \u003Cspan class=\"number\">22.5\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>, \u003Cspan class=\"string\">\"location\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"Living Room\"\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>, \u003Cspan class=\"string\">\"active\"\u003C\u002Fspan>, \u003Cspan class=\"boolean\">true\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Update existing value (same type required)\u003C\u002Fspan>\n\u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>, \u003Cspan class=\"string\">\"temperature\"\u003C\u002Fspan>, \u003Cspan class=\"number\">23.0\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F OK - float to float\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Store different types under different keys\u003C\u002Fspan>\n\u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>, \u003Cspan class=\"string\">\"sensor_count\"\u003C\u002Fspan>, \u003Cspan class=\"number\">5\u003C\u002Fspan>)      \u003Cspan class=\"comment\">\u002F\u002F integer\u003C\u002Fspan>\n\u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>, \u003Cspan class=\"string\">\"sensor_name\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"temp1\"\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F string\u003C\u002Fspan>\n\u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>, \u003Cspan class=\"string\">\"enabled\"\u003C\u002Fspan>, \u003Cspan class=\"boolean\">true\u003C\u002Fspan>)        \u003Cspan class=\"comment\">\u002F\u002F boolean\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"map-get\">\u003Ca href=\"#map-get\" class=\"anchor\">#\u003C\u002Fa> map::get\u003C\u002Fh3>\n\u003Cp>マップから指定キーに関連付けられた値を取得します。戻り値の型は、そのキーに保存された値によって決まります。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>map\u003C\u002Fcode>: \u003Ccode>map::new\u003C\u002Fcode> が返す不透明なマップハンドル。\u003C\u002Fli>\n\u003Cli>\u003Ccode>key\u003C\u002Fcode>: 取得するキー名を指定する文字列。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>指定キーに格納されている値。戻り値の型は保存された値の型と一致します。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cblockquote>\n\u003Cp>\u003Cstrong>警告:\u003C\u002Fstrong> 指定キーはマップ内に存在している必要があります。存在しないキーの値を取得しようとすると \u003Cstrong>ランタイムエラー\u003C\u002Fstrong> になります。この関数を呼ぶ前に、必ず \u003Ccode>map::contains\u003C\u002Fcode> でキーの存在を確認してください。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"variable\">config\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">map::new\u003C\u002Fspan>()\n\u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>, \u003Cspan class=\"string\">\"temperature\"\u003C\u002Fspan>, \u003Cspan class=\"number\">22.5\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>, \u003Cspan class=\"string\">\"location\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"Living Room\"\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Safe access: check if key exists first\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">contains\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>, \u003Cspan class=\"string\">\"temperature\"\u003C\u002Fspan>)) {\n    \u003Cspan class=\"variable\">temp\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">map::get\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>, \u003Cspan class=\"string\">\"temperature\"\u003C\u002Fspan>)\n    \u003Cspan class=\"stdlib\">std::print\u003C\u002Fspan>(\u003Cspan class=\"stdlib\">str::fmt\u003C\u002Fspan>(\u003Cspan class=\"string\">\"Temperature: {}°C\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">temp\u003C\u002Fspan>))\n}\n\n\u003Cspan class=\"comment\">\u002F\u002F Access value when you know the key exists\u003C\u002Fspan>\n\u003Cspan class=\"variable\">location\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">map::get\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>, \u003Cspan class=\"string\">\"location\"\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns \"Living Room\"\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F DANGEROUS: Never do this without checking first!\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F value = map::get(config, \"nonexistent\") \u002F\u002F Runtime error!\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"map-clear\">\u003Ca href=\"#map-clear\" class=\"anchor\">#\u003C\u002Fa> map::clear\u003C\u002Fh3>\n\u003Cp>マップからすべてのキーと値のペアを削除し、空にします。この関数を呼んだ後、\u003Ccode>map::len(map)\u003C\u002Fcode> は \u003Ccode>0\u003C\u002Fcode> を返します。新しいマップを作らずに既存のマップを再利用するのに便利です。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>map\u003C\u002Fcode>: \u003Ccode>map::new\u003C\u002Fcode> が返す不透明なマップハンドル。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"variable\">config\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">map::new\u003C\u002Fspan>()\n\u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>, \u003Cspan class=\"string\">\"temperature\"\u003C\u002Fspan>, \u003Cspan class=\"number\">22.5\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>, \u003Cspan class=\"string\">\"humidity\"\u003C\u002Fspan>, \u003Cspan class=\"number\">45\u003C\u002Fspan>)\n\u003Cspan class=\"stdlib\">std::print\u003C\u002Fspan>(\u003Cspan class=\"stdlib\">str::fmt\u003C\u002Fspan>(\u003Cspan class=\"string\">\"Size before clear: {}\"\u003C\u002Fspan>, \u003Cspan class=\"stdlib\">map::len\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>))) \u003Cspan class=\"comment\">\u002F\u002F 2\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Clear all entries\u003C\u002Fspan>\n\u003Cspan class=\"stdlib\">map::clear\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>)\n\u003Cspan class=\"stdlib\">std::print\u003C\u002Fspan>(\u003Cspan class=\"stdlib\">str::fmt\u003C\u002Fspan>(\u003Cspan class=\"string\">\"Size after clear: {}\"\u003C\u002Fspan>, \u003Cspan class=\"stdlib\">map::len\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>))) \u003Cspan class=\"comment\">\u002F\u002F 0\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F The map can be reused\u003C\u002Fspan>\n\u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>, \u003Cspan class=\"string\">\"new_key\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"new_value\"\u003C\u002Fspan>)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"map-contains\">\u003Ca href=\"#map-contains\" class=\"anchor\">#\u003C\u002Fa> map::contains\u003C\u002Fh3>\n\u003Cp>指定キーがマップ内に存在するかを確認します。存在しないキーへアクセスしてランタイムエラーになるのを防ぐため、\u003Ccode>map::get\u003C\u002Fcode> を呼ぶ前に使います。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>map\u003C\u002Fcode>: \u003Ccode>map::new\u003C\u002Fcode> が返す不透明なマップハンドル。\u003C\u002Fli>\n\u003Cli>\u003Ccode>key\u003C\u002Fcode>: A string specifying the key name to check.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>キーがマップ内に存在すれば \u003Ccode>true\u003C\u002Fcode>、そうでなければ \u003Ccode>false\u003C\u002Fcode> を返します。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"variable\">config\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">map::new\u003C\u002Fspan>()\n\u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>, \u003Cspan class=\"string\">\"temperature\"\u003C\u002Fspan>, \u003Cspan class=\"number\">22.5\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>, \u003Cspan class=\"string\">\"location\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"Living Room\"\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Check if a key exists\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">contains\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>, \u003Cspan class=\"string\">\"temperature\"\u003C\u002Fspan>)) {\n    \u003Cspan class=\"stdlib\">std::print\u003C\u002Fspan>(\u003Cspan class=\"string\">\"Temperature key exists\"\u003C\u002Fspan>)\n    \u003Cspan class=\"variable\">temp\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">map::get\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>, \u003Cspan class=\"string\">\"temperature\"\u003C\u002Fspan>)\n}\n\n\u003Cspan class=\"comment\">\u002F\u002F Check for non-existent key\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">contains\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>, \u003Cspan class=\"string\">\"humidity\"\u003C\u002Fspan>)) {\n    \u003Cspan class=\"variable\">humidity\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">map::get\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>, \u003Cspan class=\"string\">\"humidity\"\u003C\u002Fspan>)\n} \u003Cspan class=\"keyword\">else\u003C\u002Fspan> {\n    \u003Cspan class=\"stdlib\">std::print\u003C\u002Fspan>(\u003Cspan class=\"string\">\"Humidity not set\"\u003C\u002Fspan>)\n}\n\n\u003Cspan class=\"comment\">\u002F\u002F Use in conditional logic\u003C\u002Fspan>\n\u003Cspan class=\"variable\">key\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"string\">\"location\"\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">contains\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>, \u003Cspan class=\"variable\">key\u003C\u002Fspan>)) {\n    \u003Cspan class=\"variable\">value\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">map::get\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>, \u003Cspan class=\"variable\">key\u003C\u002Fspan>)\n    \u003Cspan class=\"stdlib\">std::print\u003C\u002Fspan>(\u003Cspan class=\"stdlib\">str::fmt\u003C\u002Fspan>(\u003Cspan class=\"string\">\"Found {}: {}\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">key\u003C\u002Fspan>, \u003Cspan class=\"variable\">value\u003C\u002Fspan>))\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"map-keys\">\u003Ca href=\"#map-keys\" class=\"anchor\">#\u003C\u002Fa> map::keys\u003C\u002Fh3>\n\u003Cp>マップに現在格納されているすべてのキーを含む配列を返します。返された配列は \u003Ccode>array::len\u003C\u002Fcode> と \u003Ccode>array::get_at\u003C\u002Fcode> で走査し、各キーを処理できます。キーの順序は保証されません。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>map\u003C\u002Fcode>: \u003Ccode>map::new\u003C\u002Fcode> が返す不透明なマップハンドル。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>各要素がマップのキーである文字列の配列。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"variable\">settings\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">map::new\u003C\u002Fspan>()\n\u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"variable\">settings\u003C\u002Fspan>, \u003Cspan class=\"string\">\"brightness\"\u003C\u002Fspan>, \u003Cspan class=\"number\">80\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"variable\">settings\u003C\u002Fspan>, \u003Cspan class=\"string\">\"color\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"warm\"\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"variable\">settings\u003C\u002Fspan>, \u003Cspan class=\"string\">\"enabled\"\u003C\u002Fspan>, \u003Cspan class=\"boolean\">true\u003C\u002Fspan>)\n\n\u003Cspan class=\"variable\">keys\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">keys\u003C\u002Fspan>(\u003Cspan class=\"variable\">settings\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">while\u003C\u002Fspan> (\u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">&lt;\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::len\u003C\u002Fspan>(\u003Cspan class=\"variable\">keys\u003C\u002Fspan>)) {\n    \u003Cspan class=\"variable\">key\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::get_at\u003C\u002Fspan>(\u003Cspan class=\"variable\">keys\u003C\u002Fspan>, \u003Cspan class=\"variable\">i\u003C\u002Fspan>)\n    \u003Cspan class=\"variable\">value\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">map::get\u003C\u002Fspan>(\u003Cspan class=\"variable\">settings\u003C\u002Fspan>, \u003Cspan class=\"variable\">key\u003C\u002Fspan>)\n    \u003Cspan class=\"stdlib\">std::print\u003C\u002Fspan>(\u003Cspan class=\"stdlib\">str::fmt\u003C\u002Fspan>(\u003Cspan class=\"string\">\"{} = {}\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">key\u003C\u002Fspan>, \u003Cspan class=\"variable\">value\u003C\u002Fspan>))\n    \u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">+\u003C\u002Fspan> \u003Cspan class=\"number\">1\u003C\u002Fspan>\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"map-values\">\u003Ca href=\"#map-values\" class=\"anchor\">#\u003C\u002Fa> map::values\u003C\u002Fh3>\n\u003Cp>マップに現在格納されているすべての値を含む配列を返します。返された配列は \u003Ccode>array::len\u003C\u002Fcode> と \u003Ccode>array::get_at\u003C\u002Fcode> で走査できます。値の順序は \u003Ccode>map::keys\u003C\u002Fcode> が返すキーの順序に対応します。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>map\u003C\u002Fcode>: \u003Ccode>map::new\u003C\u002Fcode> が返す不透明なマップハンドル。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>各要素がマップの値である配列。要素は任意の型にできます。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"variable\">sensors\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">map::new\u003C\u002Fspan>()\n\u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"variable\">sensors\u003C\u002Fspan>, \u003Cspan class=\"string\">\"temp\"\u003C\u002Fspan>, \u003Cspan class=\"number\">22.5\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"variable\">sensors\u003C\u002Fspan>, \u003Cspan class=\"string\">\"humidity\"\u003C\u002Fspan>, \u003Cspan class=\"number\">65\u003C\u002Fspan>)\n\n\u003Cspan class=\"variable\">values\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">map\u003C\u002Fspan>::\u003Cspan class=\"function\">values\u003C\u002Fspan>(\u003Cspan class=\"variable\">sensors\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">while\u003C\u002Fspan> (\u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">&lt;\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::len\u003C\u002Fspan>(\u003Cspan class=\"variable\">values\u003C\u002Fspan>)) {\n    \u003Cspan class=\"stdlib\">std::print\u003C\u002Fspan>(\u003Cspan class=\"stdlib\">array::get_at\u003C\u002Fspan>(\u003Cspan class=\"variable\">values\u003C\u002Fspan>, \u003Cspan class=\"variable\">i\u003C\u002Fspan>))\n    \u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">+\u003C\u002Fspan> \u003Cspan class=\"number\">1\u003C\u002Fspan>\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch2 id=\"json-cao-zuo\">\u003Ca href=\"#json-cao-zuo\" class=\"anchor\">#\u003C\u002Fa> JSON 操作\u003C\u002Fh2>\n\u003Cp>このセクションでは、JSON データを扱う関数について説明します。JSON (JavaScript Object Notation) は、特に Web API との通信でよく使われるデータ交換形式です。\u003C\u002Fp>\n\u003Ch3 id=\"json-get\">\u003Ca href=\"#json-get\" class=\"anchor\">#\u003C\u002Fa> json::get\u003C\u002Fh3>\n\u003Cp>ドット記法のパスを使って JSON 文字列から値を取り出します。この関数は JSON を解析し、ネストしたオブジェクトをたどって指定位置の値を取得します。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>json\u003C\u002Fcode>: 有効な JSON データを含む文字列。\u003C\u002Fli>\n\u003Cli>\u003Ccode>path\u003C\u002Fcode>: ドット記法で目的のフィールドへのパスを指定する文字列 (例: \u003Ccode>&quot;a.b.c.d&quot;\u003C\u002Fcode>)。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>指定パスにある値。戻り値の型は JSON 値の型 (\u003Ccode>string\u003C\u002Fcode>、\u003Ccode>number\u003C\u002Fcode>、\u003Ccode>bool\u003C\u002Fcode>、\u003Ccode>array\u003C\u002Fcode>) によって決まります。\u003Ccode>array\u003C\u002Fcode> は配列操作で説明したのと同じ配列型で、\u003Ccode>array::*\u003C\u002Fcode> 関数で利用できます。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Simple JSON object\u003C\u002Fspan>\n\u003Cspan class=\"variable\">json_data\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"string\">\"\"\"{\"temperature\": 22.5, \"location\": \"Living Room\", \"active\": true}\"\"\"\u003C\u002Fspan>\n\u003Cspan class=\"variable\">temp\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">json::get\u003C\u002Fspan>(\u003Cspan class=\"variable\">json_data\u003C\u002Fspan>, \u003Cspan class=\"string\">\"temperature\"\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns 22.5\u003C\u002Fspan>\n\u003Cspan class=\"variable\">location\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">json::get\u003C\u002Fspan>(\u003Cspan class=\"variable\">json_data\u003C\u002Fspan>, \u003Cspan class=\"string\">\"location\"\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns \"Living Room\"\u003C\u002Fspan>\n\u003Cspan class=\"variable\">active\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">json::get\u003C\u002Fspan>(\u003Cspan class=\"variable\">json_data\u003C\u002Fspan>, \u003Cspan class=\"string\">\"active\"\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns true\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Nested JSON object\u003C\u002Fspan>\n\u003Cspan class=\"variable\">nested\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"string\">\"\"\"{\"sensor\": {\"id\": \"temp1\", \"value\": 23.5, \"enabled\": false}}\"\"\"\u003C\u002Fspan>\n\u003Cspan class=\"variable\">sensor_id\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">json::get\u003C\u002Fspan>(\u003Cspan class=\"variable\">nested\u003C\u002Fspan>, \u003Cspan class=\"string\">\"sensor.id\"\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns \"temp1\"\u003C\u002Fspan>\n\u003Cspan class=\"variable\">sensor_value\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">json::get\u003C\u002Fspan>(\u003Cspan class=\"variable\">nested\u003C\u002Fspan>, \u003Cspan class=\"string\">\"sensor.value\"\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns 23.5\u003C\u002Fspan>\n\u003Cspan class=\"variable\">sensor_enabled\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">json::get\u003C\u002Fspan>(\u003Cspan class=\"variable\">nested\u003C\u002Fspan>, \u003Cspan class=\"string\">\"sensor.enabled\"\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns false\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Deeply nested structure\u003C\u002Fspan>\n\u003Cspan class=\"variable\">deep\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"string\">\"\"\"{\"building\": {\"floor\": {\"room\": {\"temperature\": 22.0}}}}\"\"\"\u003C\u002Fspan>\n\u003Cspan class=\"variable\">room_temp\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">json::get\u003C\u002Fspan>(\u003Cspan class=\"variable\">deep\u003C\u002Fspan>, \u003Cspan class=\"string\">\"building.floor.room.temperature\"\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns 22.0\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Getting an array value\u003C\u002Fspan>\n\u003Cspan class=\"variable\">json_with_array\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"string\">\"\"\"{\"readings\": [21.5, 22.0, 22.5]}\"\"\"\u003C\u002Fspan>\n\u003Cspan class=\"variable\">readings\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">json::get\u003C\u002Fspan>(\u003Cspan class=\"variable\">json_with_array\u003C\u002Fspan>, \u003Cspan class=\"string\">\"readings\"\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns array [21.5, 22.0, 22.5]\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch2 id=\"http-cao-zuo\">\u003Ca href=\"#http-cao-zuo\" class=\"anchor\">#\u003C\u002Fa> HTTP 操作\u003C\u002Fh2>\n\u003Cp>このセクションでは、外部サービスへ HTTP リクエストを送る関数について説明します。Volang スクリプトから Web API と通信したり、通知を送ったり、サードパーティサービスと連携したりできます。\u003C\u002Fp>\n\u003Ch3 id=\"http-client\">\u003Ca href=\"#http-client\" class=\"anchor\">#\u003C\u002Fa> http::client\u003C\u002Fh3>\n\u003Cp>HTTP リクエストに必要な新しい HTTP クライアント インスタンスを作成します。クライアントは接続設定を管理し、リクエスト実行を担当します。他の HTTP 関数を呼ぶ前に作成する必要があります。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>HTTP クライアントを表す不透明なハンドル。リクエストを実行するには、\u003Ccode>http::call\u003C\u002Fcode> などの他の HTTP 関数へ渡します。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Create an HTTP client\u003C\u002Fspan>\n\u003Cspan class=\"variable\">client\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">http::client\u003C\u002Fspan>()\n\n\u003Cspan class=\"comment\">\u002F\u002F The client is now ready to make requests\u003C\u002Fspan>\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"http-set-method\">\u003Ca href=\"#http-set-method\" class=\"anchor\">#\u003C\u002Fa> http::set_method\u003C\u002Fh3>\n\u003Cp>リクエストの HTTP メソッドを設定します。\u003Ccode>http::call\u003C\u002Fcode> でリクエストを実行する前に呼ぶ必要があります。設定しない場合、既定のメソッドは \u003Ccode>GET\u003C\u002Fcode> です。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>client\u003C\u002Fcode>: \u003Ccode>http::client\u003C\u002Fcode> が返す不透明な HTTP クライアント ハンドル。\u003C\u002Fli>\n\u003Cli>\u003Ccode>method\u003C\u002Fcode>: HTTP メソッドを指定する文字列。対応値: \u003Ccode>&quot;GET&quot;\u003C\u002Fcode>、\u003Ccode>&quot;POST&quot;\u003C\u002Fcode>、\u003Ccode>&quot;PUT&quot;\u003C\u002Fcode>、\u003Ccode>&quot;DELETE&quot;\u003C\u002Fcode>、\u003Ccode>&quot;PATCH&quot;\u003C\u002Fcode>、\u003Ccode>&quot;HEAD&quot;\u003C\u002Fcode>、\u003Ccode>&quot;OPTIONS&quot;\u003C\u002Fcode>。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"variable\">client\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">http::client\u003C\u002Fspan>()\n\n\u003Cspan class=\"comment\">\u002F\u002F Set method to POST for sending data\u003C\u002Fspan>\n\u003Cspan class=\"stdlib\">http::set_method\u003C\u002Fspan>(\u003Cspan class=\"variable\">client\u003C\u002Fspan>, \u003Cspan class=\"string\">\"POST\"\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Set method to GET for retrieving data (this is the default)\u003C\u002Fspan>\n\u003Cspan class=\"stdlib\">http::set_method\u003C\u002Fspan>(\u003Cspan class=\"variable\">client\u003C\u002Fspan>, \u003Cspan class=\"string\">\"GET\"\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Set method to PUT for updating resources\u003C\u002Fspan>\n\u003Cspan class=\"stdlib\">http::set_method\u003C\u002Fspan>(\u003Cspan class=\"variable\">client\u003C\u002Fspan>, \u003Cspan class=\"string\">\"PUT\"\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Set method to DELETE for removing resources\u003C\u002Fspan>\n\u003Cspan class=\"stdlib\">http::set_method\u003C\u002Fspan>(\u003Cspan class=\"variable\">client\u003C\u002Fspan>, \u003Cspan class=\"string\">\"DELETE\"\u003C\u002Fspan>)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"http-set-header\">\u003Ca href=\"#http-set-header\" class=\"anchor\">#\u003C\u002Fa> http::set_header\u003C\u002Fh3>\n\u003Cp>リクエストにカスタム HTTP ヘッダーを追加します。複数回呼び出して複数のヘッダーを追加できます。ヘッダーは認証トークン、Content-Type、カスタム メタデータなど、リクエストに付加情報を渡すために使います。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>client\u003C\u002Fcode>: \u003Ccode>http::client\u003C\u002Fcode> が返す不透明な HTTP クライアント ハンドル。\u003C\u002Fli>\n\u003Cli>\u003Ccode>key\u003C\u002Fcode>: ヘッダー名を指定する文字列 (例: \u003Ccode>&quot;Content-Type&quot;\u003C\u002Fcode>、\u003Ccode>&quot;Authorization&quot;\u003C\u002Fcode>)。\u003C\u002Fli>\n\u003Cli>\u003Ccode>value\u003C\u002Fcode>: ヘッダー値を指定する文字列。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"variable\">client\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">http::client\u003C\u002Fspan>()\n\u003Cspan class=\"stdlib\">http::set_method\u003C\u002Fspan>(\u003Cspan class=\"variable\">client\u003C\u002Fspan>, \u003Cspan class=\"string\">\"POST\"\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Set content type for JSON data\u003C\u002Fspan>\n\u003Cspan class=\"stdlib\">http::set_header\u003C\u002Fspan>(\u003Cspan class=\"variable\">client\u003C\u002Fspan>, \u003Cspan class=\"string\">\"Content-Type\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"application\u002Fjson\"\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Add authorization header with API key\u003C\u002Fspan>\n\u003Cspan class=\"stdlib\">http::set_header\u003C\u002Fspan>(\u003Cspan class=\"variable\">client\u003C\u002Fspan>, \u003Cspan class=\"string\">\"Authorization\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"Bearer my-api-token-123\"\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Add custom headers\u003C\u002Fspan>\n\u003Cspan class=\"stdlib\">http::set_header\u003C\u002Fspan>(\u003Cspan class=\"variable\">client\u003C\u002Fspan>, \u003Cspan class=\"string\">\"X-Custom-Header\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"custom-value\"\u003C\u002Fspan>)\n\u003Cspan class=\"stdlib\">http::set_header\u003C\u002Fspan>(\u003Cspan class=\"variable\">client\u003C\u002Fspan>, \u003Cspan class=\"string\">\"Accept\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"application\u002Fjson\"\u003C\u002Fspan>)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"http-set-body\">\u003Ca href=\"#http-set-body\" class=\"anchor\">#\u003C\u002Fa> http::set_body\u003C\u002Fh3>\n\u003Cp>リクエスト本文の内容を設定します。通常、\u003Ccode>POST\u003C\u002Fcode>、\u003Ccode>PUT\u003C\u002Fcode>、\u003Ccode>PATCH\u003C\u002Fcode> リクエストでサーバーへデータを送るときに使います。本文には JSON、フォーム データ、その他のテキスト形式を含められます。本文形式に合わせて、\u003Ccode>http::set_header\u003C\u002Fcode> で適切な \u003Ccode>Content-Type\u003C\u002Fcode> ヘッダーを設定してください。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>client\u003C\u002Fcode>: \u003Ccode>http::client\u003C\u002Fcode> が返す不透明な HTTP クライアント ハンドル。\u003C\u002Fli>\n\u003Cli>\u003Ccode>body\u003C\u002Fcode>: リクエスト本文を含む文字列。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"variable\">client\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">http::client\u003C\u002Fspan>()\n\u003Cspan class=\"stdlib\">http::set_method\u003C\u002Fspan>(\u003Cspan class=\"variable\">client\u003C\u002Fspan>, \u003Cspan class=\"string\">\"POST\"\u003C\u002Fspan>)\n\u003Cspan class=\"stdlib\">http::set_header\u003C\u002Fspan>(\u003Cspan class=\"variable\">client\u003C\u002Fspan>, \u003Cspan class=\"string\">\"Content-Type\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"application\u002Fjson\"\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Set JSON body\u003C\u002Fspan>\n\u003Cspan class=\"stdlib\">http::set_body\u003C\u002Fspan>(\u003Cspan class=\"variable\">client\u003C\u002Fspan>, \u003Cspan class=\"string\">\"\"\"{\"temperature\": 22.5, \"humidity\": 45}\"\"\"\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Or build the body dynamically using str::fmt\u003C\u002Fspan>\n\u003Cspan class=\"variable\">temp\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"number\">22.5\u003C\u002Fspan>\n\u003Cspan class=\"variable\">humidity\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"number\">45\u003C\u002Fspan>\n\u003Cspan class=\"variable\">body\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">str::fmt\u003C\u002Fspan>(\u003Cspan class=\"string\">\"\"\"{\"temperature\": {}, \"humidity\": {}}\"\"\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">temp\u003C\u002Fspan>, \u003Cspan class=\"variable\">humidity\u003C\u002Fspan>)\n\u003Cspan class=\"stdlib\">http::set_body\u003C\u002Fspan>(\u003Cspan class=\"variable\">client\u003C\u002Fspan>, \u003Cspan class=\"variable\">body\u003C\u002Fspan>)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"http-call\">\u003Ca href=\"#http-call\" class=\"anchor\">#\u003C\u002Fa> http::call\u003C\u002Fh3>\n\u003Cp>設定済みのクライアント設定 (メソッド、ヘッダー、本文) を使って、指定 URL へ HTTP リクエストを実行します。この関数は非同期で、リクエストを送ってすぐに戻ります。応答は \u003Ccode>http::on_response\u003C\u002Fcode> コールバック関数経由で届き、スクリプト内で定義する必要があります。対応プロトコルは \u003Ccode>http:\u002F\u002F\u003C\u002Fcode> と \u003Ccode>https:\u002F\u002F\u003C\u002Fcode> です。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>client\u003C\u002Fcode>: \u003Ccode>http::client\u003C\u002Fcode> が返す不透明な HTTP クライアント ハンドル。\u003C\u002Fli>\n\u003Cli>\u003Ccode>url\u003C\u002Fcode>: リクエスト送信先の完全な URL を含む文字列。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。応答は \u003Ccode>http::on_response\u003C\u002Fcode> コールバック経由で非同期に届きます。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>コールバック: http::on_response(status, body, headers)\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>HTTP 応答を受け取るには、次のシグネチャで外部コールバック関数を定義する必要があります:\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"keyword\">extern\u003C\u002Fspan> \u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"stdlib\">http::on_response\u003C\u002Fspan>(\u003Cspan class=\"variable\">status\u003C\u002Fspan>, \u003Cspan class=\"variable\">body\u003C\u002Fspan>, \u003Cspan class=\"variable\">headers\u003C\u002Fspan>) {\n    \u003Cspan class=\"comment\">\u002F\u002F Handle the response here\u003C\u002Fspan>\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\n\u003Cp>\u003Cstrong>コールバック パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>status\u003C\u002Fcode>: HTTP ステータス コードを表す整数 (例: 成功は \u003Ccode>200\u003C\u002Fcode>、見つからない場合は \u003Ccode>404\u003C\u002Fcode>、サーバー エラーは \u003Ccode>500\u003C\u002Fcode>)。\u003C\u002Fli>\n\u003Cli>\u003Ccode>body\u003C\u002Fcode>: 応答本文を含む文字列。\u003C\u002Fli>\n\u003Cli>\u003Ccode>headers\u003C\u002Fcode>: 応答ヘッダーをキーと値のペアとして含むマップ オブジェクト (マップ操作を参照)。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Define the response callback - this will be called when the response arrives\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">extern\u003C\u002Fspan> \u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"stdlib\">http::on_response\u003C\u002Fspan>(\u003Cspan class=\"variable\">status\u003C\u002Fspan>, \u003Cspan class=\"variable\">body\u003C\u002Fspan>, \u003Cspan class=\"variable\">headers\u003C\u002Fspan>) {\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">status\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"number\">200\u003C\u002Fspan>) {\n        \u003Cspan class=\"stdlib\">std::print\u003C\u002Fspan>(\u003Cspan class=\"stdlib\">str::fmt\u003C\u002Fspan>(\u003Cspan class=\"string\">\"Success! Response: {}\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">body\u003C\u002Fspan>))\n    } \u003Cspan class=\"keyword\">else\u003C\u002Fspan> {\n        \u003Cspan class=\"stdlib\">std::print\u003C\u002Fspan>(\u003Cspan class=\"stdlib\">str::fmt\u003C\u002Fspan>(\u003Cspan class=\"string\">\"Error: HTTP {}\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">status\u003C\u002Fspan>))\n    }\n}\n\n\u003Cspan class=\"comment\">\u002F\u002F Prepare and send the request\u003C\u002Fspan>\n\u003Cspan class=\"variable\">client\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">http::client\u003C\u002Fspan>()\n\u003Cspan class=\"stdlib\">http::set_method\u003C\u002Fspan>(\u003Cspan class=\"variable\">client\u003C\u002Fspan>, \u003Cspan class=\"string\">\"GET\"\u003C\u002Fspan>)\n\u003Cspan class=\"stdlib\">http::set_header\u003C\u002Fspan>(\u003Cspan class=\"variable\">client\u003C\u002Fspan>, \u003Cspan class=\"string\">\"Accept\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"application\u002Fjson\"\u003C\u002Fspan>)\n\u003Cspan class=\"stdlib\">http::call\u003C\u002Fspan>(\u003Cspan class=\"variable\">client\u003C\u002Fspan>, \u003Cspan class=\"string\">\"http:\u002F\u002F192.168.1.100\u002Fapi\u002Fstatus\"\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F For POST request with data\u003C\u002Fspan>\n\u003Cspan class=\"variable\">client2\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">http::client\u003C\u002Fspan>()\n\u003Cspan class=\"stdlib\">http::set_method\u003C\u002Fspan>(\u003Cspan class=\"variable\">client2\u003C\u002Fspan>, \u003Cspan class=\"string\">\"POST\"\u003C\u002Fspan>)\n\u003Cspan class=\"stdlib\">http::set_header\u003C\u002Fspan>(\u003Cspan class=\"variable\">client2\u003C\u002Fspan>, \u003Cspan class=\"string\">\"Content-Type\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"application\u002Fjson\"\u003C\u002Fspan>)\n\u003Cspan class=\"stdlib\">http::set_body\u003C\u002Fspan>(\u003Cspan class=\"variable\">client2\u003C\u002Fspan>, \u003Cspan class=\"string\">\"\"\"{\"command\": \"turn_on\"}\"\"\"\u003C\u002Fspan>)\n\u003Cspan class=\"stdlib\">http::call\u003C\u002Fspan>(\u003Cspan class=\"variable\">client2\u003C\u002Fspan>, \u003Cspan class=\"string\">\"http:\u002F\u002F192.168.1.100\u002Fapi\u002Fdevice\u002Frelay1\"\u003C\u002Fspan>)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch2 id=\"tcp-cao-zuo\">\u003Ca href=\"#tcp-cao-zuo\" class=\"anchor\">#\u003C\u002Fa> TCP 操作\u003C\u002Fh2>\n\u003Cp>このセクションでは、生の TCP 通信を行う関数について説明します。HTTP が使えない PLC、メディア コントローラ、産業用ゲートウェイなど、TCP 上で独自のバイナリまたはテキスト プロトコルを話すデバイスやサービスと Volang スクリプトが通信できます。\u003C\u002Fp>\n\u003Cp>2 つの利用モデルがあります。短いリクエスト\u002F応答のやり取りには \u003Ccode>tcp::oneshot\u003C\u002Fcode> が 1 回の呼び出しで一連の処理を行います。接続を開いたまま複数メッセージをやり取るプロトコルには、\u003Ccode>tcp::open\u003C\u002Fcode>、\u003Ccode>tcp::send\u003C\u002Fcode>、\u003Ccode>tcp::receive\u003C\u002Fcode>、\u003Ccode>tcp::close\u003C\u002Fcode> を使います。\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>\u003Cstrong>注意:\u003C\u002Fstrong> Volang プログラムが同時に保持できる TCP 接続は \u003Cstrong>1 つだけ\u003C\u002Fstrong> です。新しい接続を開く前に、\u003Ccode>tcp::close()\u003C\u002Fcode> で現在の接続を閉じてください。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch3 id=\"tcp-oneshot\">\u003Ca href=\"#tcp-oneshot\" class=\"anchor\">#\u003C\u002Fa> tcp::oneshot\u003C\u002Fh3>\n\u003Cp>1 回の呼び出しで TCP 通信の一連の処理を行います。指定アドレスへ接続を開き、リクエスト バイトを送信し、応答を読み取ってから接続を閉じます。この関数は非同期で、通信を開始してすぐに戻ります。応答を受信したとき、期待バイト数に達したとき、または操作が失敗したときに、結果が \u003Ccode>on_result\u003C\u002Fcode> コールバックへ届きます。\u003C\u002Fp>\n\u003Cp>接続ごとに 1 メッセージを送り 1 件の応答を期待する、短いリクエスト\u002F応答プロトコル向けです。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>sa\u003C\u002Fcode> (string): リモート ホストのソケット アドレス。\u003Ccode>&quot;host:port&quot;\u003C\u002Fcode> 形式 (例: \u003Ccode>&quot;192.168.1.50:9100&quot;\u003C\u002Fcode>)。\u003C\u002Fli>\n\u003Cli>\u003Ccode>din\u003C\u002Fcode>: 送信するリクエスト データを保持するバイト配列 (\u003Ccode>array::new\u003C\u002Fcode> で作成)。各要素は \u003Ccode>0\u003C\u002Fcode> から \u003Ccode>255\u003C\u002Fcode> の範囲のバイト値。\u003C\u002Fli>\n\u003Cli>\u003Ccode>exrs\u003C\u002Fcode> (integer): 期待する応答サイズ (バイト)。通信を完了する前に、このバイト数まで読み取ります。\u003C\u002Fli>\n\u003Cli>\u003Ccode>on_result\u003C\u002Fcode> (string): 結果を受け取る \u003Ccode>extern fn\u003C\u002Fcode> コールバックの名前。関数は同じスクリプト内で定義する必要があります。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。結果は \u003Ccode>on_result\u003C\u002Fcode> コールバック経由で非同期に届きます。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>コールバック: on_result(result, dout)\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>\u003Ccode>on_result\u003C\u002Fcode> で指定したコールバックは、同じスクリプト内で \u003Ccode>extern fn\u003C\u002Fcode> 構文で宣言する必要があります:\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"keyword\">extern\u003C\u002Fspan> \u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">on_result\u003C\u002Fspan>(\u003Cspan class=\"variable\">result\u003C\u002Fspan>, \u003Cspan class=\"variable\">dout\u003C\u002Fspan>) {\n    \u003Cspan class=\"comment\">\u002F\u002F Handle the response here\u003C\u002Fspan>\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\n\u003Cp>\u003Cstrong>コールバック パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>result\u003C\u002Fcode> (integer): 通信が成功した場合は \u003Ccode>0\u003C\u002Fcode>、失敗した場合は \u003Ccode>-1\u003C\u002Fcode> (接続確立不可、タイムアウト、期待データ到着前の切断など)。\u003C\u002Fli>\n\u003Cli>\u003Ccode>dout\u003C\u002Fcode>: 応答バイトを含むバイト配列。失敗時は配列が空の場合があります。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Handle the response once the exchange completes\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">extern\u003C\u002Fspan> \u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">on_result\u003C\u002Fspan>(\u003Cspan class=\"variable\">result\u003C\u002Fspan>, \u003Cspan class=\"variable\">dout\u003C\u002Fspan>) {\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">result\u003C\u002Fspan> \u003Cspan class=\"operator\">!=\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>) {\n        \u003Cspan class=\"comment\">\u002F\u002F Mark the device as unreachable\u003C\u002Fspan>\n        \u003Cspan class=\"stdlib\">output::set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"online\"\u003C\u002Fspan>, \u003Cspan class=\"boolean\">false\u003C\u002Fspan>)\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan>\n    }\n\n    \u003Cspan class=\"comment\">\u002F\u002F Read the first byte of the response and expose its state\u003C\u002Fspan>\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"stdlib\">array::len\u003C\u002Fspan>(\u003Cspan class=\"variable\">dout\u003C\u002Fspan>) \u003Cspan class=\"operator\">&gt;\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>) {\n        \u003Cspan class=\"variable\">status\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::get_at\u003C\u002Fspan>(\u003Cspan class=\"variable\">dout\u003C\u002Fspan>, \u003Cspan class=\"number\">0\u003C\u002Fspan>)\n        \u003Cspan class=\"stdlib\">output::set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"online\"\u003C\u002Fspan>, \u003Cspan class=\"boolean\">true\u003C\u002Fspan>)\n        \u003Cspan class=\"stdlib\">output::set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"status\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">status\u003C\u002Fspan>)\n    }\n}\n\n\u003Cspan class=\"comment\">\u002F\u002F Build the request payload as a byte array\u003C\u002Fspan>\n\u003Cspan class=\"variable\">request\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::new\u003C\u002Fspan>(\u003Cspan class=\"number\">0x01\u003C\u002Fspan>, \u003Cspan class=\"number\">0x03\u003C\u002Fspan>, \u003Cspan class=\"number\">0x00\u003C\u002Fspan>, \u003Cspan class=\"number\">0x00\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Send 4 bytes and expect an 8-byte reply\u003C\u002Fspan>\n\u003Cspan class=\"variable\">tcp\u003C\u002Fspan>::\u003Cspan class=\"function\">oneshot\u003C\u002Fspan>(\u003Cspan class=\"string\">\"192.168.1.50:9100\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">request\u003C\u002Fspan>, \u003Cspan class=\"number\">8\u003C\u002Fspan>, \u003Cspan class=\"string\">\"on_result\"\u003C\u002Fspan>)\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"tcp-open\">\u003Ca href=\"#tcp-open\" class=\"anchor\">#\u003C\u002Fa> tcp::open\u003C\u002Fh3>\n\u003Cp>指定ソケット アドレスへ TCP 接続を確立します。接続は \u003Ccode>tcp::close()\u003C\u002Fcode> で閉じるか、リモート側が切断するまで開いたままです。接続が開くと、\u003Ccode>tcp::send\u003C\u002Fcode> と \u003Ccode>tcp::receive\u003C\u002Fcode> で利用されます。\u003C\u002Fp>\n\u003Cp>プログラムが保持できる TCP 接続は 1 つだけなので、すでに接続がある状態でこの関数を呼ぶとエラーになります。先に既存の接続を閉じてください。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>addr\u003C\u002Fcode> (string): リモート ホストのソケット アドレス。\u003Ccode>&quot;host:port&quot;\u003C\u002Fcode> 形式 (例: \u003Ccode>&quot;192.168.1.50:4998&quot;\u003C\u002Fcode>)。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Connect to a device that speaks a persistent TCP protocol\u003C\u002Fspan>\n\u003Cspan class=\"variable\">tcp\u003C\u002Fspan>::\u003Cspan class=\"function\">open\u003C\u002Fspan>(\u003Cspan class=\"string\">\"192.168.1.50:4998\"\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F The connection is now available for tcp::send and tcp::receive\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"tcp-close\">\u003Ca href=\"#tcp-close\" class=\"anchor\">#\u003C\u002Fa> tcp::close\u003C\u002Fh3>\n\u003Cp>現在開いている TCP 接続を閉じます。この呼び出し後、プログラムは接続を保持せず、同じアドレスでも別のアドレスでも \u003Ccode>tcp::open\u003C\u002Fcode> で新しい接続を確立できます。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Finished talking to the device - release the connection\u003C\u002Fspan>\n\u003Cspan class=\"variable\">tcp\u003C\u002Fspan>::\u003Cspan class=\"function\">close\u003C\u002Fspan>()\n\n\u003Cspan class=\"comment\">\u002F\u002F A new connection can now be opened\u003C\u002Fspan>\n\u003Cspan class=\"variable\">tcp\u003C\u002Fspan>::\u003Cspan class=\"function\">open\u003C\u002Fspan>(\u003Cspan class=\"string\">\"192.168.1.60:4998\"\u003C\u002Fspan>)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"tcp-send\">\u003Ca href=\"#tcp-send\" class=\"anchor\">#\u003C\u002Fa> tcp::send\u003C\u002Fh3>\n\u003Cp>現在開いている TCP 接続経由でデータを送信します。この関数は非同期で、送信データをキューに入れてすぐに戻ります。送信完了時または送信失敗時に、結果が \u003Ccode>on_sent\u003C\u002Fcode> コールバックへ届きます。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>data\u003C\u002Fcode>: 送信するデータを保持するバイト配列 (\u003Ccode>array::new\u003C\u002Fcode> で作成)。各要素は \u003Ccode>0\u003C\u002Fcode> から \u003Ccode>255\u003C\u002Fcode> の範囲のバイト値。\u003C\u002Fli>\n\u003Cli>\u003Ccode>on_sent\u003C\u002Fcode> (string): 結果を受け取る \u003Ccode>extern fn\u003C\u002Fcode> コールバックの名前。関数は同じスクリプト内で定義する必要があります。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。結果は \u003Ccode>on_sent\u003C\u002Fcode> コールバック経由で非同期に届きます。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>コールバック: on_sent(result)\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>\u003Ccode>on_sent\u003C\u002Fcode> で指定したコールバックは、同じスクリプト内で \u003Ccode>extern fn\u003C\u002Fcode> 構文で宣言する必要があります:\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"keyword\">extern\u003C\u002Fspan> \u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">on_sent\u003C\u002Fspan>(\u003Cspan class=\"variable\">result\u003C\u002Fspan>) {\n    \u003Cspan class=\"comment\">\u002F\u002F Handle the send result here\u003C\u002Fspan>\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\n\u003Cp>\u003Cstrong>コールバック パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>result\u003C\u002Fcode> (integer): データ送信が成功した場合は \u003Ccode>0\u003C\u002Fcode>、エラーが発生した場合は \u003Ccode>-1\u003C\u002Fcode>。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"keyword\">extern\u003C\u002Fspan> \u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">on_sent\u003C\u002Fspan>(\u003Cspan class=\"variable\">result\u003C\u002Fspan>) {\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">result\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>) {\n        \u003Cspan class=\"stdlib\">std::print\u003C\u002Fspan>(\u003Cspan class=\"string\">\"Command sent\"\u003C\u002Fspan>)\n    } \u003Cspan class=\"keyword\">else\u003C\u002Fspan> {\n        \u003Cspan class=\"comment\">\u002F\u002F Sending failed - the connection is likely broken\u003C\u002Fspan>\n        \u003Cspan class=\"stdlib\">output::set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"online\"\u003C\u002Fspan>, \u003Cspan class=\"boolean\">false\u003C\u002Fspan>)\n    }\n}\n\n\u003Cspan class=\"variable\">tcp\u003C\u002Fspan>::\u003Cspan class=\"function\">open\u003C\u002Fspan>(\u003Cspan class=\"string\">\"192.168.1.50:4998\"\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Send a 3-byte command\u003C\u002Fspan>\n\u003Cspan class=\"variable\">command\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::new\u003C\u002Fspan>(\u003Cspan class=\"number\">0x02\u003C\u002Fspan>, \u003Cspan class=\"number\">0x10\u003C\u002Fspan>, \u003Cspan class=\"number\">0x03\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">tcp\u003C\u002Fspan>::\u003Cspan class=\"function\">send\u003C\u002Fspan>(\u003Cspan class=\"variable\">command\u003C\u002Fspan>, \u003Cspan class=\"string\">\"on_sent\"\u003C\u002Fspan>)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"tcp-receive\">\u003Ca href=\"#tcp-receive\" class=\"anchor\">#\u003C\u002Fa> tcp::receive\u003C\u002Fh3>\n\u003Cp>現在開いている TCP 接続に 2 つのコールバックを登録します。1 つはデータ到着のたびに、もう 1 つは接続が閉じられたまたは失われたときに呼び出されます。この関数はすぐに戻り、接続上でイベントが起きるとシステムがコールバックを呼び出します。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>on_data\u003C\u002Fcode> (string): 接続がデータを受信したときに呼び出す \u003Ccode>extern fn\u003C\u002Fcode> コールバックの名前。関数は同じスクリプト内で定義する必要があります。\u003C\u002Fli>\n\u003Cli>\u003Ccode>on_closed\u003C\u002Fcode> (string): リモート側により接続が閉じられた、または切断されたときに呼び出す \u003Ccode>extern fn\u003C\u002Fcode> コールバックの名前。関数は同じスクリプト内で定義する必要があります。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。受信データと接続切断は、コールバック経由で非同期に届きます。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>コールバック: on_data(bytes)\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"keyword\">extern\u003C\u002Fspan> \u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">on_data\u003C\u002Fspan>(\u003Cspan class=\"variable\">bytes\u003C\u002Fspan>) {\n    \u003Cspan class=\"comment\">\u002F\u002F Process the received bytes here\u003C\u002Fspan>\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\n\u003Cp>\u003Cstrong>コールバック パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>bytes\u003C\u002Fcode>: 受信データを含むバイト配列。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cblockquote>\n\u003Cp>\u003Cstrong>警告:\u003C\u002Fstrong> The \u003Ccode>bytes\u003C\u002Fcode> array is only valid \u003Cstrong>during the callback execution\u003C\u002Fstrong>. After the callback returns, its contents are overwritten by the next incoming data. TCP is a stream protocol, so a single callback may deliver a partial message or several messages at once. Assembling complete messages is the script's responsibility: copy the bytes you still need into a state variable, typically an array state variable used as a receive buffer, since global variables are not accessible inside functions.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>\u003Cstrong>コールバック: on_closed()\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"keyword\">extern\u003C\u002Fspan> \u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">on_closed\u003C\u002Fspan>() {\n    \u003Cspan class=\"comment\">\u002F\u002F React to the connection being closed or lost\u003C\u002Fspan>\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\n\u003Cp>\u003Cstrong>コールバック パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F The device sends 2-byte status frames: [frame type, value].\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F A frame may arrive split across two callbacks, so incoming bytes\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F are collected in the \"rx_buffer\" array state variable.\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">extern\u003C\u002Fspan> \u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">on_data\u003C\u002Fspan>(\u003Cspan class=\"variable\">bytes\u003C\u002Fspan>) {\n    \u003Cspan class=\"variable\">buf\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"rx_buffer\"\u003C\u002Fspan>)\n\n    \u003Cspan class=\"comment\">\u002F\u002F Append the new bytes to the buffered ones\u003C\u002Fspan>\n    \u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>\n    \u003Cspan class=\"keyword\">while\u003C\u002Fspan> (\u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">&lt;\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::len\u003C\u002Fspan>(\u003Cspan class=\"variable\">bytes\u003C\u002Fspan>)) {\n        \u003Cspan class=\"stdlib\">array::append\u003C\u002Fspan>(\u003Cspan class=\"variable\">buf\u003C\u002Fspan>, \u003Cspan class=\"stdlib\">array::get_at\u003C\u002Fspan>(\u003Cspan class=\"variable\">bytes\u003C\u002Fspan>, \u003Cspan class=\"variable\">i\u003C\u002Fspan>))\n        \u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">+\u003C\u002Fspan> \u003Cspan class=\"number\">1\u003C\u002Fspan>\n    }\n\n    \u003Cspan class=\"comment\">\u002F\u002F Process every complete 2-byte frame\u003C\u002Fspan>\n    \u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>\n    \u003Cspan class=\"keyword\">while\u003C\u002Fspan> (\u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">+\u003C\u002Fspan> \u003Cspan class=\"number\">1\u003C\u002Fspan> \u003Cspan class=\"operator\">&lt;\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::len\u003C\u002Fspan>(\u003Cspan class=\"variable\">buf\u003C\u002Fspan>)) {\n        \u003Cspan class=\"variable\">frame_type\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::get_at\u003C\u002Fspan>(\u003Cspan class=\"variable\">buf\u003C\u002Fspan>, \u003Cspan class=\"variable\">i\u003C\u002Fspan>)\n        \u003Cspan class=\"variable\">value\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::get_at\u003C\u002Fspan>(\u003Cspan class=\"variable\">buf\u003C\u002Fspan>, \u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">+\u003C\u002Fspan> \u003Cspan class=\"number\">1\u003C\u002Fspan>)\n        \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">frame_type\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"number\">0x01\u003C\u002Fspan>) {\n            \u003Cspan class=\"stdlib\">output::set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"status\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">value\u003C\u002Fspan>)\n        }\n        \u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">+\u003C\u002Fspan> \u003Cspan class=\"number\">2\u003C\u002Fspan>\n    }\n\n    \u003Cspan class=\"comment\">\u002F\u002F Keep the unconsumed byte (if any) for the next callback.\u003C\u002Fspan>\n    \u003Cspan class=\"comment\">\u002F\u002F \"buf\" is a shared handle to the state array, so no state::set\u003C\u002Fspan>\n    \u003Cspan class=\"comment\">\u002F\u002F is needed - these modifications update the state directly.\u003C\u002Fspan>\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">i\u003C\u002Fspan> \u003Cspan class=\"operator\">&lt;\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::len\u003C\u002Fspan>(\u003Cspan class=\"variable\">buf\u003C\u002Fspan>)) {\n        \u003Cspan class=\"variable\">leftover\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">array::get_at\u003C\u002Fspan>(\u003Cspan class=\"variable\">buf\u003C\u002Fspan>, \u003Cspan class=\"variable\">i\u003C\u002Fspan>)\n        \u003Cspan class=\"stdlib\">array::clear\u003C\u002Fspan>(\u003Cspan class=\"variable\">buf\u003C\u002Fspan>)\n        \u003Cspan class=\"stdlib\">array::append\u003C\u002Fspan>(\u003Cspan class=\"variable\">buf\u003C\u002Fspan>, \u003Cspan class=\"variable\">leftover\u003C\u002Fspan>)\n    } \u003Cspan class=\"keyword\">else\u003C\u002Fspan> {\n        \u003Cspan class=\"stdlib\">array::clear\u003C\u002Fspan>(\u003Cspan class=\"variable\">buf\u003C\u002Fspan>)\n    }\n}\n\n\u003Cspan class=\"keyword\">extern\u003C\u002Fspan> \u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">on_closed\u003C\u002Fspan>() {\n    \u003Cspan class=\"comment\">\u002F\u002F The device dropped the connection\u003C\u002Fspan>\n    \u003Cspan class=\"stdlib\">output::set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"online\"\u003C\u002Fspan>, \u003Cspan class=\"boolean\">false\u003C\u002Fspan>)\n}\n\n\u003Cspan class=\"variable\">tcp\u003C\u002Fspan>::\u003Cspan class=\"function\">open\u003C\u002Fspan>(\u003Cspan class=\"string\">\"192.168.1.50:4998\"\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">tcp\u003C\u002Fspan>::\u003Cspan class=\"function\">receive\u003C\u002Fspan>(\u003Cspan class=\"string\">\"on_data\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"on_closed\"\u003C\u002Fspan>)\n\u003Cspan class=\"stdlib\">output::set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"online\"\u003C\u002Fspan>, \u003Cspan class=\"boolean\">true\u003C\u002Fspan>)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch2 id=\"shi-jian-cao-zuo\">\u003Ca href=\"#shi-jian-cao-zuo\" class=\"anchor\">#\u003C\u002Fa> 時間操作\u003C\u002Fh2>\u003Ch3 id=\"time-now\">\u003Ca href=\"#time-now\" class=\"anchor\">#\u003C\u002Fa> time::now\u003C\u002Fh3>\n\u003Cp>現在のシステム時刻を Unix タイムスタンプとして取得します。値は 1970 年 1 月 1 日 00:00:00 UTC (Unix エポック) から経過した秒数を表します。\u003C\u002Fp>\n\u003Cp>イベント発生時刻の記録、操作間の経過時間の計算、外部サーバーとの同期などに欠かせません。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>現在の Unix タイムスタンプ (秒) を表す整数値。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Store the time when the motion was last detected\u003C\u002Fspan>\n\u003Cspan class=\"variable\">last_motion_time\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">time::now\u003C\u002Fspan>()\n\n\u003Cspan class=\"comment\">\u002F\u002F ... later in the code ...\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Check if more than 60 seconds have passed since the last motion\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"stdlib\">time::now\u003C\u002Fspan>() \u003Cspan class=\"operator\">&gt;\u003C\u002Fspan> \u003Cspan class=\"variable\">last_motion_time\u003C\u002Fspan> \u003Cspan class=\"operator\">+\u003C\u002Fspan> \u003Cspan class=\"number\">60\u003C\u002Fspan>) {\n   ...\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"time-uptime\">\u003Ca href=\"#time-uptime\" class=\"anchor\">#\u003C\u002Fa> time::uptime\u003C\u002Fh3>\n\u003Cp>モジュールの電源投入または最後の再起動から経過した秒数を返します。システムの健全性監視、想定外の再起動の検出、電源サイクル後にリセットすべき時間ベース ロジックの実装に便利です。\u003C\u002Fp>\n\u003Cp>絶対タイムスタンプを提供する \u003Ccode>time::now()\u003C\u002Fcode> と異なり、\u003Ccode>time::uptime()\u003C\u002Fcode> はモジュール起動のたびに 0 から始まる相対的な計測値を提供します。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>なし。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>モジュール起動からの秒数を表す整数値。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Log a warning if the module has been running for more than 24 hours\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F (might indicate it hasn't been restarted for maintenance)\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"stdlib\">time::uptime\u003C\u002Fspan>() \u003Cspan class=\"operator\">&gt;\u003C\u002Fspan> \u003Cspan class=\"number\">86400\u003C\u002Fspan>) {\n    \u003Cspan class=\"stdlib\">std::print\u003C\u002Fspan>(\u003Cspan class=\"string\">\"Module running for over 24 hours\"\u003C\u002Fspan>)\n}\n\n\u003Cspan class=\"comment\">\u002F\u002F Delay initialization logic until the module has been stable for 10 seconds\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"stdlib\">time::uptime\u003C\u002Fspan>() \u003Cspan class=\"operator\">&gt;\u003C\u002Fspan> \u003Cspan class=\"number\">10\u003C\u002Fspan>) {\n    \u003Cspan class=\"comment\">\u002F\u002F Safe to assume all sensors have initialized\u003C\u002Fspan>\n    ...\n}\n\n\u003Cspan class=\"comment\">\u002F\u002F Detect if the module was recently restarted\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"stdlib\">time::uptime\u003C\u002Fspan>() \u003Cspan class=\"operator\">&lt;\u003C\u002Fspan> \u003Cspan class=\"number\">60\u003C\u002Fspan>) {\n    \u003Cspan class=\"stdlib\">std::print\u003C\u002Fspan>(\u003Cspan class=\"string\">\"Module just started, initializing...\"\u003C\u002Fspan>)\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch2 id=\"shu-xue-cao-zuo\">\u003Ca href=\"#shu-xue-cao-zuo\" class=\"anchor\">#\u003C\u002Fa> 数学操作\u003C\u002Fh2>\u003Ch3 id=\"math-abs\">\u003Ca href=\"#math-abs\" class=\"anchor\">#\u003C\u002Fa> math::abs\u003C\u002Fh3>\n\u003Cp>数値の絶対値を計算します。入力が負なら正の同等値を返し、正ならそのまま返します。整数と float の両方に対応します。\u003C\u002Fp>\n\u003Cp>どちらの値が大きいかを気にせず、2 つのセンサー読み取り値の差 (デルタ) を求めるのに特に便利です (たとえば、温度がどちら向きにも 1 度以上変化したかを確認する場合)。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>value\u003C\u002Fcode>: 処理対象の数値。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>入力の非負値を表す数値。戻り値の型は入力型と一致します。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"variable\">target_temp\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"number\">21.0\u003C\u002Fspan>\n\u003Cspan class=\"variable\">current_temp\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"number\">19.5\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Calculate the difference ignoring direction\u003C\u002Fspan>\n\u003Cspan class=\"variable\">delta\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">math::abs\u003C\u002Fspan>(\u003Cspan class=\"variable\">target_temp\u003C\u002Fspan> \u003Cspan class=\"operator\">-\u003C\u002Fspan> \u003Cspan class=\"variable\">current_temp\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F If the difference is significant (more than 0.5 degrees), take action\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">delta\u003C\u002Fspan> \u003Cspan class=\"operator\">&gt;\u003C\u002Fspan> \u003Cspan class=\"number\">0.5\u003C\u002Fspan>) {\n    ....\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"math-round\">\u003Ca href=\"#math-round\" class=\"anchor\">#\u003C\u002Fa> math::round\u003C\u002Fh3>\n\u003Cp>指定した浮動小数点数を最も近い整数値に丸めます。ちょうど \u003Ccode>0.5\u003C\u002Fcode> になる中間値は、0 から離れる方向に丸められます。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>value\u003C\u002Fcode>: 丸める数値。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>最も近い整数を表す整数値。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Example 1: Rounding sensor data for display\u003C\u002Fspan>\n\u003Cspan class=\"variable\">rawTemp\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"number\">21.7\u003C\u002Fspan>\n\u003Cspan class=\"variable\">displayTemp\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">math::round\u003C\u002Fspan>(\u003Cspan class=\"variable\">rawTemp\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns 22\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Example 2: Halfway cases (rounding away from zero)\u003C\u002Fspan>\n\u003Cspan class=\"variable\">val1\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">math::round\u003C\u002Fspan>(\u003Cspan class=\"number\">2.5\u003C\u002Fspan>)  \u003Cspan class=\"comment\">\u002F\u002F Returns 3\u003C\u002Fspan>\n\u003Cspan class=\"variable\">val2\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">math::round\u003C\u002Fspan>(\u003Cspan class=\"operator\">-\u003C\u002Fspan>\u003Cspan class=\"number\">2.5\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns -3\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Setting a dimmer level (must be an integer 0-100)\u003C\u002Fspan>\n\u003Cspan class=\"variable\">calculatedLevel\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"number\">55.4\u003C\u002Fspan>\n\u003Cspan class=\"variable\">dimmerLevel\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">math::round\u003C\u002Fspan>(\u003Cspan class=\"variable\">calculatedLevel\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns 55\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"math-random\">\u003Ca href=\"#math-random\" class=\"anchor\">#\u003C\u002Fa> math::random\u003C\u002Fh3>\n\u003Cp>[0.0, 1.0) の範囲の疑似乱数 (浮動小数点数) を返します。呼び出すたびに異なる値が生成されます。結果をスケールし、\u003Ccode>math::round\u003C\u002Fcode> と組み合わせると、希望範囲内の乱数整数を作れます。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>なし。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>0.0\u003C\u002Fcode> 以上 \u003Ccode>1.0\u003C\u002Fcode> 未満の float 値。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Get a random value between 0.0 and 1.0\u003C\u002Fspan>\n\u003Cspan class=\"variable\">r\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">math\u003C\u002Fspan>::\u003Cspan class=\"function\">random\u003C\u002Fspan>()\n\n\u003Cspan class=\"comment\">\u002F\u002F Generate a random integer between 1 and 100\u003C\u002Fspan>\n\u003Cspan class=\"variable\">n\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">math::round\u003C\u002Fspan>(\u003Cspan class=\"variable\">math\u003C\u002Fspan>::\u003Cspan class=\"function\">random\u003C\u002Fspan>() \u003Cspan class=\"operator\">*\u003C\u002Fspan> \u003Cspan class=\"number\">100\u003C\u002Fspan>) \u003Cspan class=\"operator\">+\u003C\u002Fspan> \u003Cspan class=\"number\">1\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Random boolean decision (50\u002F50)\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">math\u003C\u002Fspan>::\u003Cspan class=\"function\">random\u003C\u002Fspan>() \u003Cspan class=\"operator\">&lt;\u003C\u002Fspan> \u003Cspan class=\"number\">0.5\u003C\u002Fspan>) {\n    \u003Cspan class=\"stdlib\">output::set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"led\"\u003C\u002Fspan>, \u003Cspan class=\"boolean\">true\u003C\u002Fspan>)\n} \u003Cspan class=\"keyword\">else\u003C\u002Fspan> {\n    \u003Cspan class=\"stdlib\">output::set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"led\"\u003C\u002Fspan>, \u003Cspan class=\"boolean\">false\u003C\u002Fspan>)\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch2 id=\"base64-cao-zuo\">\u003Ca href=\"#base64-cao-zuo\" class=\"anchor\">#\u003C\u002Fa> Base64 操作\u003C\u002Fh2>\n\u003Cp>このセクションでは、Base64 エンコード方式でデータを符号化する関数について説明します。\u003C\u002Fp>\n\u003Ch3 id=\"base64-encode\">\u003Ca href=\"#base64-encode\" class=\"anchor\">#\u003C\u002Fa> base64::encode\u003C\u002Fh3>\n\u003Cp>標準アルファベット (RFC 4648 Table 1) を使って文字列を Base64 表現にエンコードします。出力は \u003Ccode>A-Z\u003C\u002Fcode>、\u003Ccode>a-z\u003C\u002Fcode>、\u003Ccode>0-9\u003C\u002Fcode>、\u003Ccode>+\u003C\u002Fcode>、\u003Ccode>\u002F\u003C\u002Fcode> を使い、出力長が 4 の倍数になるよう \u003Ccode>=\u003C\u002Fcode> でパディングします。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>data\u003C\u002Fcode> (string): エンコード対象の入力文字列。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>入力の Base64 エンコード表現を含む文字列。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Encode a simple string\u003C\u002Fspan>\n\u003Cspan class=\"variable\">encoded\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">base64\u003C\u002Fspan>::\u003Cspan class=\"function\">encode\u003C\u002Fspan>(\u003Cspan class=\"string\">\"Hello, World!\"\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns \"SGVsbG8sIFdvcmxkIQ==\"\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Encode credentials for HTTP Basic Auth\u003C\u002Fspan>\n\u003Cspan class=\"variable\">credentials\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">str::concat\u003C\u002Fspan>(\u003Cspan class=\"string\">\"user\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\":\"\u003C\u002Fspan>, \u003Cspan class=\"string\">\"password\"\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">auth\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">str::concat\u003C\u002Fspan>(\u003Cspan class=\"string\">\"Basic \"\u003C\u002Fspan>, \u003Cspan class=\"variable\">base64\u003C\u002Fspan>::\u003Cspan class=\"function\">encode\u003C\u002Fspan>(\u003Cspan class=\"variable\">credentials\u003C\u002Fspan>))\n\u003Cspan class=\"stdlib\">http::set_header\u003C\u002Fspan>(\u003Cspan class=\"variable\">client\u003C\u002Fspan>, \u003Cspan class=\"string\">\"Authorization\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">auth\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Empty string encodes to empty string\u003C\u002Fspan>\n\u003Cspan class=\"variable\">encoded\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">base64\u003C\u002Fspan>::\u003Cspan class=\"function\">encode\u003C\u002Fspan>(\u003Cspan class=\"string\">\"\"\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns \"\"\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch3 id=\"base64-url-encode\">\u003Ca href=\"#base64-url-encode\" class=\"anchor\">#\u003C\u002Fa> base64::url_encode\u003C\u002Fh3>\n\u003Cp>URL セーフ アルファベット (RFC 4648 Table 2) を使って文字列を Base64url 表現にエンコードします。出力は \u003Ccode>A-Z\u003C\u002Fcode>、\u003Ccode>a-z\u003C\u002Fcode>、\u003Ccode>0-9\u003C\u002Fcode>、\u003Ccode>-\u003C\u002Fcode>、\u003Ccode>_\u003C\u002Fcode> を使い、パディング文字は \u003Cstrong>含みません\u003C\u002Fstrong>。URL、クエリ パラメータ、JWT セグメントでの利用に安全です。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>data\u003C\u002Fcode> (string): エンコード対象の入力文字列。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>パディングなしの Base64url エンコード表現を含む文字列。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Encode for URL-safe usage\u003C\u002Fspan>\n\u003Cspan class=\"variable\">encoded\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">base64\u003C\u002Fspan>::\u003Cspan class=\"function\">url_encode\u003C\u002Fspan>(\u003Cspan class=\"string\">\"Hello, World!\"\u003C\u002Fspan>) \u003Cspan class=\"comment\">\u002F\u002F Returns \"SGVsbG8sIFdvcmxkIQ\"\u003C\u002Fspan>\n\n\u003Cspan class=\"comment\">\u002F\u002F Build a JWT header and payload\u003C\u002Fspan>\n\u003Cspan class=\"variable\">header\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">base64\u003C\u002Fspan>::\u003Cspan class=\"function\">url_encode\u003C\u002Fspan>(\u003Cspan class=\"string\">\"\"\"{\"alg\":\"RS256\",\"typ\":\"JWT\"}\"\"\"\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">payload\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">base64\u003C\u002Fspan>::\u003Cspan class=\"function\">url_encode\u003C\u002Fspan>(\u003Cspan class=\"string\">\"\"\"{\"sub\":\"1234567890\",\"name\":\"John\"}\"\"\"\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">signing_input\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">str::concat\u003C\u002Fspan>(\u003Cspan class=\"variable\">header\u003C\u002Fspan>, \u003Cspan class=\"string\">\".\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">payload\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Note the difference from standard base64:\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F base64::encode(\"subjects?_d\")     returns \"c3ViamVjdHM\u002FX2Q=\"\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F base64::url_encode(\"subjects?_d\") returns \"c3ViamVjdHM_X2Q\"\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\u003Ch2 id=\"an-hao-cao-zuo\">\u003Ca href=\"#an-hao-cao-zuo\" class=\"anchor\">#\u003C\u002Fa> 暗号操作\u003C\u002Fh2>\n\u003Cp>このセクションでは、暗号処理を行う関数について説明します。\u003C\u002Fp>\n\u003Ch3 id=\"crypto-rs256-sign\">\u003Ca href=\"#crypto-rs256-sign\" class=\"anchor\">#\u003C\u002Fa> crypto::rs256_sign\u003C\u002Fh3>\n\u003Cp>RS256 アルゴリズム (SHA-256 を使う RSASSA-PKCS1-v1_5) で RSA 秘密鍵を使い、データに署名します。JWT 署名やその他の認証付きメッセージの作成に通常使われます。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>パラメータ:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>data\u003C\u002Fcode> (string): 署名対象のデータ。\u003C\u002Fli>\n\u003Cli>\u003Ccode>private_key_pem\u003C\u002Fcode> (string): PEM 形式の RSA 秘密鍵。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>戻り値:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Base64url エンコードされた署名を含む文字列。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>例:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Create a JWT signature\u003C\u002Fspan>\n\u003Cspan class=\"variable\">header\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">base64\u003C\u002Fspan>::\u003Cspan class=\"function\">url_encode\u003C\u002Fspan>(\u003Cspan class=\"string\">\"\"\"{\"alg\":\"RS256\",\"typ\":\"JWT\"}\"\"\"\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">payload\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">base64\u003C\u002Fspan>::\u003Cspan class=\"function\">url_encode\u003C\u002Fspan>(\u003Cspan class=\"string\">\"\"\"{\"sub\":\"device-001\",\"iat\":1700000000}\"\"\"\u003C\u002Fspan>)\n\u003Cspan class=\"variable\">signing_input\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">str::concat\u003C\u002Fspan>(\u003Cspan class=\"variable\">header\u003C\u002Fspan>, \u003Cspan class=\"string\">\".\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">payload\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Sign with the private key\u003C\u002Fspan>\n\u003Cspan class=\"variable\">signature\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">crypto\u003C\u002Fspan>::\u003Cspan class=\"function\">rs256_sign\u003C\u002Fspan>(\u003Cspan class=\"variable\">signing_input\u003C\u002Fspan>, \u003Cspan class=\"variable\">private_key\u003C\u002Fspan>)\n\n\u003Cspan class=\"comment\">\u002F\u002F Assemble the complete JWT\u003C\u002Fspan>\n\u003Cspan class=\"variable\">jwt\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">str::concat\u003C\u002Fspan>(\u003Cspan class=\"variable\">signing_input\u003C\u002Fspan>, \u003Cspan class=\"string\">\".\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">signature\u003C\u002Fspan>)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>",[1656,1658,1661,1664,1667,1670,1673,1676,1679,1682,1685,1688,1691,1694,1697,1700,1703,1706,1709,1712,1715,1718,1721,1724,1727,1730,1733,1736,1739,1742,1745,1748,1751,1754,1757,1760,1763,1766,1769,1772,1775,1778,1781,1784,1787,1790,1793,1796,1799,1802,1805,1808,1811,1814,1817,1820,1823,1826,1829,1832,1835,1838,1841,1844,1847,1850,1853,1856,1859,1862],{"level":94,"text":1451,"id":1657},"biao-zhun-raiburari",{"level":100,"text":1659,"id":1660},"入力操作","ru-li-cao-zuo",{"level":105,"text":1662,"id":1663},"input::channel","input-channel",{"level":105,"text":1665,"id":1666},"input::value","input-value",{"level":105,"text":1668,"id":1669},"input::get","input-get",{"level":100,"text":1671,"id":1672},"出力操作","chu-li-cao-zuo",{"level":105,"text":1674,"id":1675},"output::get","output-get",{"level":105,"text":1677,"id":1678},"output::set","output-set",{"level":105,"text":1680,"id":1681},"output::toggle","output-toggle",{"level":100,"text":1683,"id":1684},"状態操作","zhuang-tai-cao-zuo",{"level":105,"text":1686,"id":1687},"state::get","state-get",{"level":105,"text":1689,"id":1690},"state::set","state-set",{"level":100,"text":1692,"id":1693},"設定操作","she-ding-cao-zuo",{"level":105,"text":1695,"id":1696},"config::get","config-get",{"level":100,"text":1698,"id":1699},"非同期操作","fei-tong-qi-cao-zuo",{"level":105,"text":1701,"id":1702},"callback::set","callback-set",{"level":105,"text":1704,"id":1705},"callback::clear","callback-clear",{"level":100,"text":1707,"id":1708},"文字列操作","wen-zi-lie-cao-zuo",{"level":105,"text":1710,"id":1711},"str::len","str-len",{"level":105,"text":1713,"id":1714},"str::trim","str-trim",{"level":105,"text":1716,"id":1717},"str::concat","str-concat",{"level":105,"text":1719,"id":1720},"str::count","str-count",{"level":105,"text":1722,"id":1723},"str::replace","str-replace",{"level":105,"text":1725,"id":1726},"str::number","str-number",{"level":105,"text":1728,"id":1729},"str::fmt","str-fmt",{"level":105,"text":1731,"id":1732},"str::split","str-split",{"level":105,"text":1734,"id":1735},"str::split_has_next","str-split-has-next",{"level":105,"text":1737,"id":1738},"str::split_next","str-split-next",{"level":100,"text":1740,"id":1741},"配列操作","pei-lie-cao-zuo",{"level":105,"text":1743,"id":1744},"array::new","array-new",{"level":105,"text":1746,"id":1747},"array::len","array-len",{"level":105,"text":1749,"id":1750},"array::get_at","array-get-at",{"level":105,"text":1752,"id":1753},"array::put_at","array-put-at",{"level":105,"text":1755,"id":1756},"array::append","array-append",{"level":105,"text":1758,"id":1759},"array::clear","array-clear",{"level":100,"text":1761,"id":1762},"マップ操作","matupucao-zuo",{"level":105,"text":1764,"id":1765},"map::new","map-new",{"level":105,"text":1767,"id":1768},"map::len","map-len",{"level":105,"text":1770,"id":1771},"map::set","map-set",{"level":105,"text":1773,"id":1774},"map::get","map-get",{"level":105,"text":1776,"id":1777},"map::clear","map-clear",{"level":105,"text":1779,"id":1780},"map::contains","map-contains",{"level":105,"text":1782,"id":1783},"map::keys","map-keys",{"level":105,"text":1785,"id":1786},"map::values","map-values",{"level":100,"text":1788,"id":1789},"JSON 操作","json-cao-zuo",{"level":105,"text":1791,"id":1792},"json::get","json-get",{"level":100,"text":1794,"id":1795},"HTTP 操作","http-cao-zuo",{"level":105,"text":1797,"id":1798},"http::client","http-client",{"level":105,"text":1800,"id":1801},"http::set_method","http-set-method",{"level":105,"text":1803,"id":1804},"http::set_header","http-set-header",{"level":105,"text":1806,"id":1807},"http::set_body","http-set-body",{"level":105,"text":1809,"id":1810},"http::call","http-call",{"level":100,"text":1812,"id":1813},"TCP 操作","tcp-cao-zuo",{"level":105,"text":1815,"id":1816},"tcp::oneshot","tcp-oneshot",{"level":105,"text":1818,"id":1819},"tcp::open","tcp-open",{"level":105,"text":1821,"id":1822},"tcp::close","tcp-close",{"level":105,"text":1824,"id":1825},"tcp::send","tcp-send",{"level":105,"text":1827,"id":1828},"tcp::receive","tcp-receive",{"level":100,"text":1830,"id":1831},"時間操作","shi-jian-cao-zuo",{"level":105,"text":1833,"id":1834},"time::now","time-now",{"level":105,"text":1836,"id":1837},"time::uptime","time-uptime",{"level":100,"text":1839,"id":1840},"数学操作","shu-xue-cao-zuo",{"level":105,"text":1842,"id":1843},"math::abs","math-abs",{"level":105,"text":1845,"id":1846},"math::round","math-round",{"level":105,"text":1848,"id":1849},"math::random","math-random",{"level":100,"text":1851,"id":1852},"Base64 操作","base64-cao-zuo",{"level":105,"text":1854,"id":1855},"base64::encode","base64-encode",{"level":105,"text":1857,"id":1858},"base64::url_encode","base64-url-encode",{"level":100,"text":1860,"id":1861},"暗号操作","an-hao-cao-zuo",{"level":105,"text":1863,"id":1864},"crypto::rs256_sign","crypto-rs256-sign",{},1784735244876]